Linux Shell编程 条件判断语法
if条件判断语句
单分支 if 条件语句
语法格式:
if [条件判断式];then 程序 fi
或者
if [条件判断式] then 程序 fi
在使用单分支 if 条件查询时需要注意几点:
- if 语句使用 fi 结尾,和一般语言使用大括号结尾不同。
- [条件判断式] 就是使用 test 命令判断,所以中括号和条件判断式之间必须有空格。
- then 后面跟符合条件之后执行的程序。可以放在 [] 之后,用";"分隔;也可以换行写入,就不需要";":
示例:通过脚本判断根分区的使用率是否超过 80%,如果超过 80% 则向管理员报警。 :
[root@localhost ~]# df -h #查看一下服务器的分区状况 文件系统 容量 已用 可用 已用% %挂载点 /dev/sda3 20G 1.8G 17G 10% / tmpfs 306M 0 306M 0% /dev/shm /dev/sda1 194M 26M 158M 15% /boot /dev/srO 3.5G 3.5G 0100% /mnt/cdrom [root@localhost ~]# vi sh/if1.sh #!/bin/bash #统计根分区的使用率 rate=$(df -h | grep "/dev/sda3" | awk '{print $5}' | cut -d"%"-f1) #把根分区使用率作为变量值赋予变量rate if [$rate -ge 80 】 #判断rate的值,如果大于等于80,则执行then程序 then echo 'Warning! /dev/sda3 is full!!" #打印警告信息。在实际工作中,也可以向管理员发送邮件 fi
"rate=$(df-h|grep "/dev/sda3"|awk'{print$5}'|cut-d"%"-f1)"命令:先使用"df-h"列出系统中的分区情况;然后使用"grep"命令提取出根分区行;再使用"awk"命令列出第五列,也就是根分区使用率这一列(不过使用率是 10%,不好比较,还要提取出 10 这个数字);最后使用"cut"命令(cut 命令比 awk 命令简单),以"%"作为分隔符,提取出第一列。
双分支条件语句
在双分支 if 条件语句中,当条件判断式成立时,则执行某个程序;当条件判断式不成立时,则执行另一个程序。语法如下:
if [条件判断式] then 当条件判断式成立时,执行的程序 else 当条件判断式不成立时,执行的另一个程序 fi
示例:
#!/bin/bash #判断输入的文件是否是一个目录 read -t 30 -p "Please input a directory:" dir #read接受键盘的输入,并存入dir变量 if[-d $dir] #测试$dir中的内容是否是一个目录 then echo "yes" #如果是一个目录,则输出yes else echo "no" #如果不是一个目录,则输出no fi
多分支 if 条件语句
在多分支 if 条件语句中,允许执行多次判断。也就是当条件判断式 1 成立时,执行程序 1;当条件判断式 2 成立时,执行程序 2;依次类推,当所有条件不成立时,执行最后的程序。语法如下:
if[条件判断式1] then 当条件判断式1成立时,执行程序1 elif [条件判断式2] then 当条件判断式2成立时,执行程序2 …省略更多条件... else 当所有条件都不成立时,最后执行此程序、 fi
示例:用多分支 if 条件语句来判断用户输入的是一个个文件还是一个目录。
[root@localhost ~]#vi sh/if-elif.sh #!/bin/bash #判断用户输入的是什么文件 read -p "Please input a filename:" file #接收键盘的输入,并赋予变量file if[-z "$file"] #判断file变量是否为空 then echo "Error,please input a filename" #如果为空,则执行程序1,也就是输出报错信息、 exit 1 #退出程序,并定义返回值为1 (把返回值赋予变量$?) elif[!-e "$file"] #判断file的值是否存在 then echo 'Your input is not a file!" #如果不存在,则执行程序2 exit 2 #退出程序,并定义返回值为2 elif[-f "$file"] #判断file的值是否为普通文件 then echo "$file is a regulare file!" #如果是普通文件,则执行程序3 elif[-d"$file"] #判断file的值是否为目录文件 then echo "$file is a directory!" #如果是目录文件,则执行程序4 else echo is an other file!" #如果以上判断都不是,则执行程序5 fi
exit 命令是退出执行程序的命令,如果符合条件 1(没有输入)和条件 2(输入的不是文件),则需要执行 exit 命令;否则程序还是会运行一下脚本的。至于 exit 后面的返回值,是自由定义的,主要用于把返回值赋予变量 $?。
示例:
[root@localhost ~]# chmod 755 sh/if-elif.sh #赋予执行权限 [root@localhost ~]# sh/if-elif.sh #执行脚本 Please input a filename: #没有任何输入 Error,please input a filename #报错信息是脚本中自己定义的 [root@localhost ~]# echo $? 1 #变量$?的返回值是我们自己定义的1 [root@localhost ~]# sh/if-elif.sh Please input a filename: jkgeia #随便输入不是文件的字符串 Your input is not a file! #报错信息是自己定义的 [root@localhost ~]# echo $? 2 #变量$?的返回值是我们自己定义的2
case多分支条件判断
case 语句和 if...elif...else 语句一样都是多分支条件语句,不过和多分支 if 条件语句不同的是,case 语句只能判断一种条件关系,而 if 语句可以判断多种条件关系。
case 语句的语法如下:
case $变量名 in "值 1") ;; 如果变量的值等于值1,则执行程序1,值 2") 如果变量的值等于值2,则执行程序2 …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac
case 语句会取出变量中的值,然后与语句体中的值逐一比较。如果数值符合,则执行对应的程序;如果数值不符,则依次比较下一个值;如果所有的值都不符合,则执行"*)"("*"代表所有其他值)中的程序。
case 语句以"case"开头,以"esac"结尾。
在每个分支程序之后要以";;"(双分号)结尾,代表该程序段结束。
示例如下:
[root@localhost ~]# vi sh/case.sh #!/bin/bash #判断用户输入 read -p "Please choose yes/no: " -t 30 cho #在屏幕上输出"请选择yes/no",然后把用户选择赋予变量cho case $cho in #判断变量cho的值 "yes") #如果是yes echo "Your choose is yes!" #则执行程序1 ;; "no") #如果是no echo "Your choose is no!" #则执行程序2 ;; *) #如果既不是yes,也不是no echo "Your choose is error!" #则执行此程序 ;; esac
请用户输入 yes 或 no,如果输入的是 yes,则输出"Your choose is yes!";如果输入的是 no,则输出"Your choose is no!";如果输入的是其他字符,则输出"Your choose is error!"。