一 条件判断式 语句
两种判断格式
test -e /root/install.log
[ -e /root/install.log ]
1.文件类型判断
-b 文件 判断文件是否存在,并且是否为块设备文件
-c 文件 判断文件是否存在,并且是否为字符设备文件
## 常用
-d 文件 判断文件是否存在,并且是否为目录
-e 文件 判断文件是否存在
-f 文件 判断是否为文件,并且是否为普通文件
# 简单的判断文件存在 语句,不能更换位置
[ -e /root/install.log ] && echo yes || echo no
-L 文件 判断文件是否存在,并且判断是否为符号链接文件
-p 文件 判断文件是否存在,并且判断是否为管道文件
-s 文件 判断文件是否存在,并且判断是否为非空
-S 文件 判断文件是否存在,并且判断是否为套接字文件
2.文件权限判断
-r 文件 判断该文件是否存在,并且是否该文件拥有读权限
-w 文件 判断该文件是否存在,并且是否该文件拥有写权限
-x 文件 判断该文件是否存在,并且是否该文件拥有执行权限
-u 文件 判断该文件是否存在,并且是否该文件拥有SUID权限
-g 文件 判断该文件是否存在,并且是否该文件拥有SGID权限
-k 文件 判断该文件是否存在,并且是否该文件拥有SBit权限
3.两个文件比较
文件1 -nt 文件2 判断文件1是否比文件2 新new(修改时间)
文件1 -ot 文件2 判断文件1是否比文件2 旧old(修改时间)
文件1 -ef 文件2 判断是否是同一个文件 inode号是否一样,是否为硬链接
4.两个整数比较
x -eq y 判断相等
x -ne y 判断不相等
x -gt y 判断x是否大于y
x -lt y 判断x是否小于y
x -ge y 判断x是否大于等于y
x -le y 判断x是否小于等于y
5.字符串比较
-z 字符串 判断字符串是否为空
-n 字符串 判断字符串是否为非空
字符串1==字符串2 判断相等
字符串1!=字符串2 判断不相等
name=sun
[ -z &name ] && echo yes || echo no
6.多重判断
判断式1 -a 判断式2 逻辑与 都为真才是真
判断式1 -o 判断式2 逻辑或 有一个为真就是真
!判断 取反,逻辑非
二 流程控制语句
1.单分支if语句
# 写法1
----------------------
if [ 条件判断式 ];then
程序
fi
# 写法2
----------------------
if [条件判断式]
then
程序
fi
判断登录用户是否是root
#!/bin/bash
test=$(env|grep "USER"|cut -d "=" -f2)
#输出测试,没有什么作用
echo $test
if ["$test"=="root"]
then
echo "Current user is root"
fi
#解析
env 会输出环境变量
里面有一个变量
USER=root,这个是制定当前用户
使用grep 行提取命令
使用cut 列提取命令
使用等号作为分隔符,-d分隔符 -f2 取第二个字段
判断分区使用率
# 判断根分区,使用超过 90% ,就会报警
df -h | grep sda5 | awk '{print $5}' | cat -d "%" -f 1
2.双分支if语句
if [条件判断式]
then
条件成立,执行1
else
不成立,执行2
fi
判断 让用户手工输入的是否为目录
read -t 30 -p "Please input a dir: " dir
if [ -d "$dir" ]
then
echo "is"
else
echo "no no"
fi
判断apache服务是否启动
# -v grep 不包含grep
#!/bin/bash
test =$(ps aux | grep httpd | grep -v grep)
#截取httpd进程
if [ -n "$test"]
then
echo "$(date) httpd is ok" >> /tmp/autostart-acc.loh
else
/etc/rc.d/init.d/httpd start $> /dev/null
echo "$(date) restart httpd !!" >> /tmp/autostart-err.loh
fi
# 注意脚本名字,可能会捕捉到自己的脚本名字
# 也可以口,判断是否运行
三 多分支if语句
语法结构
if 【判断1】
then
执行
elif [判断2]
then
执行
....
else
当前面所有都不成立,执行else
fi
加减乘除运算器
数值运算
1.判断输入是否为空
2.判断输入内容是不是数值
3.判断输入运算符
4.执行运算符操作
Bug
======================================================
#!/bin/bash
#该脚本是写一个简单的计算器
read -p "请输入第一个数字" x
read -p "请输入第二个数字" y
read -p "请输入运算符号" f
#最外层判断,判断输入的是否为空
# -n 判断 是否为非空
# -a 多重条件判断 与
if [ -n "$x" -a -n "$y" -a -n "$f" ]
then
# 下面这个表达式用于判断输入的两个字符是否完全为数字,反引号 和 $()为同一个作用,将系统命令的值赋给变量,原理为,输出变量x的值,并利用管道符,将该值进行字符串替换, sed "s/旧字符串/新字符串/g",末尾g表示将指定范围内的所有旧字符串都替换,所以虽然[0-9]表示匹配一个字符,加了g以后,会替换所有字符。
test1=`echo "$x" | sed "s/[0-9]//g"`
test2=$(echo "$y" | sed "s/[0-9]//g")
#中间的判断,判断输入的两个值是否为数字
if [ -z "$test1" -a -z "$test2" ]
then
# 最内层判断,判断是什么运算符号
if [ "$f" == "+" ]
then
echo "$x和$y的和是"$[$x+$y]
elif [ "$f" == "-" ]
then
echo "$x和$y的差是"$[$x-$y]
elif [ "$f" == "*" ]
then
echo "$x和$y的积是"$[$x*$y]
elif [ "$f" == "/" ]
then
echo "$x和$y的商是"$[$x/$y]
fi
else
echo "您输入的不是数字,重新执行脚本"
bash jisuanqi.sh
exit 2
fi
else
echo "您没有输入数字,重新执行脚本"
bash jisuanqi.sh
exit 1
fi
---------------------
作者:嘻游记
来源:CSDN
原文:https://blog.csdn.net/sinat_27932343/article/details/78858668
版权声明:本文为博主原创文章,转载请附上博文链接!
四 多分支case条件语句
#!/bin/bash
判断用户输入
read -p "Pls..... yes/no:" -t 30 cho
case $cho in
"yes")
echo "you are yes "
;;
"no")
echo "you are no "
;;
*)
echo "you are err "
;;
esac
# 更适合 选择的内容
五 for循环
for 变量 in 值1 值2 值3 值4.....
do
程序
done
# 例子
chmod 755 xxx.sh
#!bin/bash
for i in 1 2 3 4 5
do
echo $i
done
循环解压文件
#!/bin/bash
cd /root/test/
ls *.tar.gz >ls.log #覆盖
ls *.tgz >> ls.log #追加
for i in $( cat ls.log)
do
tar -zxf $i & > /dev/null
done
###
tar -zxvf v去掉,不看输出显示
/dev/null 是一个回收站
从1加到100
# !/bin/bash
s=0
for((i=1;i<=100;i=i+1))
do
s=$(($s+$i))
done
echo $s
批量添加制定数量的用户
#!/bin/bash
# 批量添加指定数量的用户
# 创建用户默认名
# 创建默认密码。
# 输入用户名,输入信息存入name变量中,限制30s的输入时间
read -p "Please input user name:" -t 30 name
# 输入需要创建的用户数量,存入num中,限制30s输入时间
read -p "Please input the number of users:" -t 30 num
# 输入需要创建的默认密码,存入pass中,限制30s输入时间
read -p "Please input the password of users:" -t 30 pass
# 用户名、用户数量、默认密码都输入成功之后
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
then
# 输入的num变量为数值类型
y=$(echo $num | sed 's/[0-9]//g')
if [ -z "$y"]
then
# 创建用户
for (( i=1;i<=$num;i=i+1))
do
# 用户名以输入用户名+序号组成
/usr/sbin/useradd $name$i &> /dev/null
# 创建默认密码
echo $pass | /usr/bin/passwd --stdin $name$i &> /dev/null
done
fi
fi
---------------------
作者:Leo-Woo
来源:CSDN
原文:https://blog.csdn.net/imw_mg/article/details/77892791
版权声明:本文为博主原创文章,转载请附上博文链接!
# 删除除了root,所有的用户
六 while循环 和 until循环
while [条件判断]
do
程序
done
和while相反
只有条件不成立的时候才执行