shell判断语法
shell中的逻辑判断
if判断格式 #! /bin/bash if [ -d /usr/local/zabbix ] then ? echo 123 fi 写法2:if 条件; then 语句; else 语句; fi #! /bin/bash if [ -d /usr/local/zabbix ] then ? echo 123 else ? mkdir /usr/local/zabbix fi 写法3:if 条件; then 语句; elif 条件; then 语句; else 语句; fi a=4 if [ $a -gt 3 ] then ? echo "<4 && >1" elif [ $a -gt 5 ] ? echo "<5 && >1" else ?echo "null" fi if判断还支持多个条件并写,一次判断多个条件,如下面的格式 if [ -d /usr/local/zabbix ] && [ -f /usr/local/zabbix/1.txt ] then ? mkdir /usr/local/zabbix/src else ? exit fi if判断文件、目录属性[ -f file ] 判断是否是普通文件,且存在 判断一个文件是否是普通文件并且存在 #! /bin/bash # 判断文件是否存在,若不存就创建 f="/usr/local/src/zabbix" if [ -f $f ] then ?echo $f is yes else touch $f 判断是否存在这个目录,如果不存在则创建 #! /bin/bash d="/usr/local/src/zabbix" if [ -d $d ] ?then ? ?echo $d ?else mkdir $d 判断文件或目录是否存在 #! /bin/bash # -e 不管是文件或目录,是判断是否存在 f="/usr/local/src/zabbix" if [ -e $f ] then ?echo $f else mkdir $f fi 判断文件是否可读,目录可读则可以查看目录下文件。文件可读则可以查看内容 #! /bin/bash f="/usr/local/src/zabbix" if [ -r $f ] then echo $f fi if特殊用法if [ -z "$a" ] 表示当变量a 的值为空时会怎么样 if [ -n "$a" ] 表示当变量a的值不为空 if grep -q ‘123‘ 1.txt; then 表示如果1.txt中含有‘123’的行时会怎样 if [ ! -e file ]; then ... 表示文件不存在时会怎样 if (($a<1)); then .. 等同于 if [ $a -lt 1 ]; then... [ ] 中不能使用 <,>,==,!=,>=,<=这样的符号 if [ -n "$a" ] ?表示当变量a的值不为空if [ -z "$a" ] ?表示当变量a 的值为空判断一个变量或文件不为空或存在内容 #! /bin/bash a=4 if [ -z "$a" ] then echo "no null" else ?echo "The shell a is null" fi 判断一个变量或文件不为空 #! /bin/bash a=/src/1.txt if [ -n "$a" ] then echo "no null" else ?echo "touch /src/1.txt" fi 将一条命令作为判断条件,判断/etc/passwd文件中是否存在root字段,如果有root字段则输出,没有则不输出 #! /bin/bash if [ -n `grep -wq "root" /etc/passwd` ] then echo "no null" fi grep -q 表示过滤某个文件内容的时候,不需要把结果输出显示出来 sh -x 执行过程 [[email?protected] src]# sh -x 1.sh ++ grep -wq root /etc/passwd + ‘[‘ -n ‘]‘ + echo ‘no null‘ no null ?cace判断case 逻辑判断这个脚本的目的是让用户输入一个数字,然后用这个脚本去判断用户输入的数字的一个范围 ! /bin/bash read -p " Please input a number: "n if [ -z "$n" ] #取变量n来判断是否为空,为空的话,说明用户没有输入数字 then ?echo "Please input a number." #返回继续提示请输入数字内容 exit 1 #然后退出来,返回一个数值 1 fi ------------------------------------------- n1=`echo $n |sed ‘s/[-0-9]//g‘` #判断输入的是否是纯数字,echo出来并替换操作,使用sed 把所有的数字[范围0-9所有数字]替换成空,$n1这个变量就映射为空 if [ ! -z $n1 ] ?#当变量不为空时,则提示继续输入数字。当变量为空时继续往下执行,表示变量中引用的是纯数字 then echo "Please input a number." #继续提示输入数字 ?exit 1 #继续退出来,返回一个数值 1 fi -------------------------------------------- if [ $n -lt 60 ] then ? tag=1 elif [ $n -ge 60 ] && [ $n -lt 80 ] then ? tag=2 elif [ $n -ge 80 ] && [ $n -lt 90 ] then ? tag=3 elif [ $n -ge 90 ] && [ $n -le 100 ] then ? tag=4 else ? tag=0 fi ----------------------------------------------------- case $tag in ? 1) echo " 不及格" ;; ? 2) echo "及格" ;; ? 3) echo "良好" ;; ? 4) echo "优秀" ;; ? *) echo "The number range is 0-100." ;; esac 脚本执行过程 + read -p ‘ Please input a number: ‘ n Please input a number: 90 + ‘[‘ -z 90 ‘]‘ //判断 90 变量是否存在 ++ sed ‘s/[-0-9]//g‘ // $n1 清空 ++ echo 90 + n1= //$n1 为空 + ‘[‘ ‘!‘ -z ‘]‘ // 判断是否不为空,不为空说明正常,往下匹配 + ‘[‘ 90 -lt 60 ‘]‘ + ‘[‘ 90 -ge 60 ‘]‘ + ‘[‘ 90 -lt 80 ‘]‘ + ‘[‘ 90 -ge 80 ‘]‘ + ‘[‘ 90 -lt 90 ‘]‘ + ‘[‘ 90 -ge 90 ‘]‘ + ‘[‘ 90 -le 100 ‘]‘ + tag=4 //匹配到了第4个条件 + case $tag in + echo $‘344274230347247200‘ 优秀 # 执行,输入非数字,就会提示请输入数字 [[email?protected] sbin]# sh -x case.sh + read -p ‘ Please input a number: ‘ n Please input a number: linux + ‘[‘ -z linux ‘]‘ //判断 linux 变量是否存在 ++ sed ‘s/[-0-9]//g‘ //清空$n1 所有数字 ++ echo linux + n1=linux //$n1不为空,所以输入的不是数字有问题 + ‘[‘ ‘!‘ -z linux ‘]‘ + echo ‘Please input a number.‘ Please input a number. //提示请输入数字,非其他字符串 + exit 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |