Linux Shell编程 条件判断语法

if条件判断语句

单分支 if 条件语句

语法格式:

if [条件判断式];then
程序
fi

或者

if [条件判断式]
then
程序
fi

在使用单分支 if 条件查询时需要注意几点:

  • if 语句使用 fi 结尾,和一般语言使用大括号结尾不同。
  • [条件判断式] 就是使用 test 命令判断,所以中括号和条件判断式之间必须有空格。
  • then 后面跟符合条件之后执行的程序。可以放在 [] 之后,用";"分隔;也可以换行写入,就不需要";":

示例:通过脚本判断根分区的使用率是否超过 80%,如果超过 80% 则向管理员报警。 :

[[email protected] ~]# 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
[[email protected] ~]# 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 条件语句来判断用户输入的是一个个文件还是一个目录。

[[email protected] ~]#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 后面的返回值,是自由定义的,主要用于把返回值赋予变量 $?。

示例:

[[email protected] ~]# chmod 755 sh/if-elif.sh
#赋予执行权限
[[email protected] ~]# sh/if-elif.sh
#执行脚本
Please input a filename:
#没有任何输入
Error,please input a filename
#报错信息是脚本中自己定义的
[[email protected] ~]# echo $?
1
#变量$?的返回值是我们自己定义的1
[[email protected] ~]# sh/if-elif.sh
Please input a filename: jkgeia
#随便输入不是文件的字符串
Your input is not a file!
#报错信息是自己定义的
[[email protected] ~]# 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"结尾。

在每个分支程序之后要以";;"(双分号)结尾,代表该程序段结束。

示例如下:

[[email protected] ~]# 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!"。

原文地址:https://www.cnblogs.com/lizhouwei/p/10048520.html

时间: 2024-12-13 07:37:53

Linux Shell编程 条件判断语法的相关文章

Linux学习 -- Shell编程 -- 条件判断

按照文件类型进行判断 两种格式 test -e /root/install.log [ -e /root/install.log ]   注意空格  适合用于脚本中 echo $?可以看到结果 [ -d /root ] && echo yes || echo no 按照文件权限进行判断 两个文件之间进行比较 eg.   [ test.txt -ef test.txt.hard ] && echo yes || echo no 两个整数之间比较 两个字符串之间比较 多重条件判

Shell中条件判断语法与判断条件

一,简介 Shell各种判断结构和运算符的用法是shell编程的基础,了解shell的判断.运算符和一些退出状态 对后面的学习有很重要的影响.shell有一个内部命令test经常用于对判断语句 进行测试一种或几种状态的条件是否成立 二. 判断条件 (1)Linux的shell中的测试命令,用于测试某种条件或某几种条件是否真实存在 测试命令是判断语句和循环语句中条件测试的工具,对判断和运算符的比较测试有很大的帮助. (2)测试条件为真,返回一个0值:      为假,返回一个非0整数值 测试命令有

Linux shell的条件判断、循环语句及实例

shell条件判断的两个特殊设备 /dev/null linux系统的空设备,也称为位桶,任何写入其中的数据均会被丢弃当你不想将标准化输出显示或者保存至文件时可以将文件从定向到/dev/null 禁止标准化输出 cat $filename > /dev/null 禁止标准化错误 rm $filename > /dev/null /dev/zero Linux的输入设备,可以用他初始化文件,可以无限制输出0, 另一个作用是用0去填充一个指定大小的文件 在条件判断语句中&&表示an

Linux Shell脚本条件判断

Shell条件判断 if list then           do something here elif list then do another thing here else do something else here fi  EX1: #!/bin/sh SYSTEM=`uname -s`    #获取操作系统类型,我本地是linux if [ $SYSTEM = "Linux" ] ; then     #如果是linux的话打印linux字符串 echo "

Linux | shell脚本-条件判断if和循环语句for

一.简介 上个章节中,我们学习了判断语句和运算语句.shell脚本中,这些判断语句一般都是和if.else.elif.for和while等语句一起使用. 在脚本编写中,条件判断语句常常用于多种情况的判断,符合哪一种情况就执行哪一种的命令. 二.shell条件判断语句:if 1.流程控制:if单分支结构 语法: if 条件判断:then 条件判断成功时执行的操作 ... fi 例子: 结合整数值比较-eq:检查主机是否在线 vim test1.sh运行结果:2.流程控制:if双分支结构 语法: i

shell编程 条件判断式----利用 case ..... esac 判断

条件判断式----利用 case ..... esac 判断 case  $变量名称 in   <==关键词为 case ,还有变量前有钱字号 "第一个变量内容")   <==每个变量内容建议用双引号括起来,关键词则为小括号 ) 程序段 ;;            <==每个类别结尾使用两个连续的分号来处理! "第二个变量内容") 程序段 ;; *)                  <==最后一个变量内容都会用 * 来代表所有其它值 不包含

shell编程 条件判断式----利用 if .... then ----多重

条件判断式----利用 if .... then ----多重 在同一个数据的判断中,如果该数据需要进行多种不同的判断时,应该怎么作?举例来说,上面的 sh06.sh 脚本中,我们只要进行一次 $yn 的判断就好 (仅进行一次 if ),不想要作多次 if 的判断. 此时你就得要知道底下的语法了: # 一个条件判断,分成功进行与失败进行 (else) if [ 条件判断式 ]; then 当条件判断式成立时,可以进行的指令工作内容: else 当条件判断式不成立时,可以进行的指令工作内容: fi

shell编程---条件判断

一.shell编程之条件判断 1.整数测试 a.条件测试的表达式 [ expression ] [[ expression ]] test expression b.整数比较 -eq: 测试两个整数是否相等:比如 $A -eq $B -ne: 测试两个整数是否不等:不等,为真:相等,为假: -gt: 测试一个数是否大于另一个数:大于,为真:否则,为假: -lt: 测试一个数是否小于另一个数:小于,为真:否则,为假: -ge: 大于或等于 -le:小于或等于 c.命令的间逻辑关系 逻辑与: &&am

Shell编程——条件判断(2)

Shell编程之条件判断 条件测试操作 test命令 测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值 格式1:test 条件表达式 格式2:[ 条件表达式 ] 文件测试[ 操作符 文件或目录 ]常用的测试操作符-d:测试是否为目录-e:测试目录或文件是否存在-f:测试是否为文件-r:测试当前用户是否有权限读取-w:测试当前用户是否有权限写入-x:测试当前用户是否有权限执行整数值比较[ 整数1 操作符 整数2 ]常用的测试操作符-eq:等于-ne:不等于-gt:大于-