条件测试 、 if选择结构 、 循环结构
条件测试 测试执行是否成功
== != -z 为空 格式: test 表达式 []
字符串
变量最好加引号,避免被认为语法错误
test abc == abc [ abc == abc ] echo $? [ abc != abc ] a=abc [ $a == abc ] [ -z $c ] 判断变量是否为空 [ ! -z $c ] 判断变量是否非空
数字
-eq 是否等于 -ne 是否不等于 -gt 是否大于 -ge 是否大于等于 -lt 是否小于 -le 是否小于等于
[ 100 -eq 100 ]
文件测试 读写权限限制对管理员无效
-e 测试文件是否存在 不论类型 -f 测试文件是否存在 必须是普通文件 -d 测试文件是否存在 必须是目录 -r 判断当前用户对文件是否有读权限 -w 判断当前用户对文件是否有写权限 -x 判断当前用户对文件是否有执行权限
[ -e /opt/1.txt ]
逻辑测试
&& 之前任务成功 才执行之后任务 || 之前任务失败 才执行之后任务 ; 没有逻辑关联,前面执行完 后面执行
是管理员就继续执行 不是就退出 [ $UID -ne 0 ] && echo "你不是管理员,程序退出" && exit ls && ls && ls [ $UID -eq 0 ] && echo 'i am root' || echo 'i am not root'
if选择结构
单分支
if 条件测试;then 命令序列1 fi
双分支
if 条件测试;then 命令序列1 else 命令序列2 fi
#!/bin/bash # ping通与不通 ping -c 3 -i 0.2 -W 1 127.0.0.1 &> /dev/null if [ $? -eq 0 ];then echo '127.0.0.1 ping通了' else echo '127.0.0.1 ping不通' fi
多分支
if 条件测试1;then 命令序列1 elif 条件测试2;then 命令序列2 else 命令序列n fi
read -p "请输入用户成绩:" n if [ $n -ge 80 ];then echo "你的评级为:优秀" elif [ $n -ge 70 ];then echo "你的评级为:良好" elif [ $n -ge 60 ];then echo "你的评级为:及格" else echo "你的评级为:不及格" fi #!/bin/bash # 制作一个猜数的游戏 let a=RANDOM read -p "请输入一个0-10之间的整数:" n if [ $n -eq $a ];then echo "恭喜你猜对了" else echo "猜错了,系统数为:"${a} fi
ping -c 3 -i 0.2 -W 1 127.0.0.1 i 每0.2s ping一次 c ping3次 W ping不通 1s返回
循环结构
for
for 变量名 in 值1 值2.。 do 命令序列 done
#!/bin/bash # 我是for循环 for i in a b c do echo "123"${i} done #!/bin/bash # 我是for循环 for i in {1..10} do echo "123"${i} done #!/bin/bash # 我是for循环 a=10 for i in `seq $a` do echo "123"${i} done #!/bin/bash # ping一组机器 a=0;b=0 for i in {130..135} do ping -c 3 -i 0.2 -W 1 192.168.10.$i &> /dev/null if [ $? -eq 0 ];then echo "192.168.10.${i}通了" let a++ else echo "192.168.10.${i}不通" let b++ fi done echo "${a}台机器通信正常" echo "${b}台机器通信异常" #!/bin/bash # 我是for循环 a=10 for ((i=1;i<5;i++)) do echo "123"${i} done
while
while 条件测试 do 命令序列 done
#!/bin/bash # 猜对才罢休 a=1 b=$[RANDOM] while [ $a -eq 1 ] do read -p "请输入一个数字【0-10】:" n if [ $n -eq $b ];then echo "恭喜你猜对了!" a=0 elif [ $n -gt $b ];then echo "猜大了" else echo "猜小了" fi done while : 冒号 表示条件测试永远正确 do done
点赞
评论