一、条件判断
1、语法结构test 条件表达式[ 条件表达式 ] 两边需要有空格[[ 条件表达式 ]] 支持正则2、条件判断相关参数判断文件类型-e 判断文件是否存在-f 判断是否是一个文件-d 判断目录是否存在-L 判断是否是链接文件-b 判断文件是否为块设备-s 判断文件是否为非空,!-s是否为空-c 判断文件是否为字符设备文件判断文件权限-r 是否可读-w 是否可写-x 是否可执行-u 是否有suid,高级权限冒险位-g 是否sgid,高级权限强制位-k 是否有t位,高级权限粘滞位判断文件新旧-nt file1 -nt file2 file1是否比file2新-ot file1 -ot file2 file1是否比file2旧-ef file1 -ef file2 file1与file2是否为同一文件判断整数-eq 相等-ne 不等-gt 大于-lt 小于-ge 大于等于-le 小于等于判断字符串-z 判断字符串是否为空,为0则成立-n 判断字符串是否为非空,不为0则成立string1 = string2 判断字符串是否相等string1 != string2 判断字符串是否不等多重条件判断-a 和 && 逻辑与-o 和 || 逻辑或; 用于分割命令或表达式&&前面为真执行后面的命令|| 前面为假执行后面的命令类C风格的数值比较(( )),=表示赋值,==表示判断((1<2));echo $? > != >= <=字符串比较=,==都表示判断[ \"$a\" = \"$b\" ][ \"$a\" == \"$b\" ][ \"$a\" != \"$b\" ][ ]与[[ ]]的区别[ $A = hello ];echo $? 语法报错[ \"$A\" = \"hello\" ];echo $? 结果正常[[ $A = hello ]];echo $? 结果正常[ -e test1 && -L test1 ];echo $? 语法报错[[ -e test1 && -L test1 ]];echo $? 结果正常
二、流程控制语句
基本语法结构
(一)if结构
if [ condition ];thencommandcommandfi[ 条件 ] && command
(二)if…else结构
if [ condition ];thencommand1elsecommand2fi[ 条件 ] && command1 || command2eg 如果用户输入hello,打印world,否则打印“请输入hello”#!/bin/env bashread -p \"请输入一个字符串:\" strif [ \"$str\" = \"hello\" ];thenecho \"world\"elseecho \"请输入hello!\"firead -p \"请输入一个字符串:\" str;[ \"$str\" = \"hello\" ] && echo \"world\" || echo \"请输入hello!\"
(三)if…elif…else结构
if [ condition1 ];thencommand1elif [ condition2 ];thencommand2elsecommand3fi
(四)层层嵌套结构
if [ condition1 ];thencommand1if [ condition2 ];thencommand2fielseif [ condition3 ];thencommand3elif [ condition4 ];thencommand4elsecommand5fifi
三、应用练习
1、判断主机是否可以通讯
#!/bin/env bash# 判断当前主机与远程主机是否互通read -p \"请输入需要远程的主机IP:\" ipping -c1 $ip &>/dev/nullif [ $? -eq 0 ];thenecho “当前主机与$ip是互通的”elseecho “当前主机与$ip不通”fi
2、判断一个进程是否存在
#!/bin/env bash# 判断一个程序的进程是否存在pgrep httpd &>/dev/nullif [ $? -ne 0 ];thenecho \"当前httpd进程不存在\"elseecho \"当前httpd进程存在\"fi或者test $? -eq 0 && echo \"当前httpd进程存在\" || echo \"当前httpd进程不存在\"
3、判断服务是否正常
#!/bin/env bash# 判断网站服务是否正常web=www.baidu.comwget -P /file/ $web &>/dev/null[ $? -eq 0 ] && echo \"网站服务OK\" && rm -f /file/index.* || echo \"网站服务down\"
eg
判断用户是否存在
#!/bin/env bashread -p \"请输入一个用户名:\" user_nameid $user_name &>/dev/nullif [ $? -eq 0 ];thenecho \"用户存在\"elseecho \"用户不存在\"fi