1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Shell编程之条件语句(if单分支 双分支 多分支 case多分支)

Shell编程之条件语句(if单分支 双分支 多分支 case多分支)

时间:2021-07-21 12:50:35

相关推荐

Shell编程之条件语句(if单分支 双分支 多分支 case多分支)

文章目录

1.条件测试操作2.if语句的结构1.单分支结构2.双分支语句3.多分支结构4.case多分支语句

1.条件测试操作

test命令测试表达式是否成立,若成立返回0,否则返回其他数值格式1:test 条件表达式格式2:[ 条件表达式 ]#前后有空格文件测试[ 操作符 文件或目录 ]常用的测试操作符-d:测试是否为目录(Directory)-e:测试目录或文件是否存在(Exist)-f:测试是否为文件(File)-r:测试当前用户是否有权限读取(Read)-w:测试当前用户是否有权限写入(Write)-x:测试当前用户是否有权限执行(excute)举例:[root@server media]# [ -d /media ]#存在这个文件夹[root@server media]# echo $?0[root@server ~]# [ -d /media/cdrom ]#不存在这个文件夹[root@server ~]# echo $?1[root@server ~]# [ -d /media ] && echo "abc"#前面为真,则输出abc[root@server ~]# [ -d /media/cdrom ] || echo "abc"#或者的意思,不管是否成立,都会输出abc[root@server ~]# echo $[!0]1

整数值比较

整数值比较[ 整数1 操作符 整数2 ]常用的测试操作符-eq:等于(Equal)-ne:不等于(Not Equal)-gt:大于(Greater Than)-lt:小于(Lesser Than)-le:小于或等于(Lesser or Equal)-ge:大于或等于(Greater or Equal)常用的测试操作符[root@server ~]# cat /etc/passwd | wc -l44[root@server ~]# [ $(cat /etc/passwd | wc -l) -gt 100 ] && echo "more than 100"[root@server ~]# [ $(cat /etc/passwd | wc -l) -gt 10 ] && echo "more than 10"more than 10[root@server ~]# free -mtotal used freeshared buff/cache availableMem: 1823 294 1100 9 428 1322Swap:2047 0 2047[root@server ~]# freecc=$(free -m | grep "Mem:" | awk '{print $6}')[root@server ~]# [ $freecc -lt 1024 ] && echo "$freecc"MB428MB[root@server ~]# cat /etc/passwd | wc -l44[root@server ~]# [ $(cat /etc/passwd | wc -l) -gt 100 ] && echo "more than 100"[root@server ~]# [ $(cat /etc/passwd | wc -l) -gt 10 ] && echo "more than 10"more than 10

字符串比较

字符串比较格式1:[ 字符串1 = 字符串2 ][ 字符串1 != 字符串2 ]格式2:[ -z 字符串 ]常用的测试操作符=:字符串内容相同!=:字符串内容不同,!号表示相反的意思-z:字符串内容为空[root@server ~]# echo $LANGzh_CN.UTF-8[root@server ~]# [ $LANG != "en.US" ] && echo "not en.US"not en.US[root@server ~]# read -p "是否覆盖现有文件(yes/no)?" ACK是否覆盖现有文件(yes/no)?yes[root@server ~]# [ $ACK = "yes" ] && echo "覆盖"覆盖

逻辑测试

逻辑测试格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...格式2:命令1 操作符 命令2 ...常用的测试操作符-a或&&:逻辑与,“而且”的意思-o或||:逻辑或,“或者”的意思!:逻辑否[root@server ~]# [ -d /etc ] && [ -r /etc ] && echo "You can"You can[root@server ~]# [ -d /etc ] || [ -d /home ] && echo "ok"ok

2.if语句的结构

1.单分支结构

语句应用实例

单分支if语句

判断挂载点目录,若不存在则自动创建[root@server ~]# cat chkmountdir.sh#!/bin/bashMOUNT_DIR="/media/cdrom"if [ ! -d $MOUNT_DIR ]#当目录不存在时执行then mkdir -p $MOUNT_DIRfi[root@server ~]# vim weather.shif [ $weather = 'rainning' ]then echo "下雨了,记得打伞"fi[root@server ~]# read -p "今天天气怎么样" weather今天天气怎么样rainning[root@server ~]# export weather[root@server ~]# sh weather.sh下雨了,记得打伞

2.双分支语句

语句应用实例

双分支if语句

[root@server ~]# cat pinghost.sh#!/bin/bashping -c 3 -i 0.2 -W 3 $1 &> /dev/nullif [ $? -eq 0 ]then echo "host $1 is up"else echo "host $1 is down"fi说明:"-c""-i""-W"选项,分别指定只发送三个测试包、间隔0.2秒、超时3秒判断ping命令的检查结果,分别给出不同的提示[root@server ~]# sh pinghost.sh 192.168.100.11host 192.168.100.11 is up[root@server ~]# sh pinghost.sh 192.168.100.12host 192.168.100.12 is down

实例2

[root@server ~]# cat weather.shif [ $weather = 'rainning' ]then echo "下雨了,记得打伞"else echo "好天气"fi[root@server ~]# read -p "今天天气怎样?" weather今天天气怎样?cloud[root@server ~]# sh weather.sh好天气[root@server ~]# read -p "今天天气怎样?" weather今天天气怎样?rainning[root@server ~]# sh weather.sh下雨了,记得打伞

pgrep -x 服务和ps aux | grep 服务的区别:

pgrep -x 某服务名称,只获取该服务进程号[root@server ~]# pgrep -x sshd114699426ps aux | grep 服务是查询该服务所有的相关信息,包含端口[root@server ~]# ps aux | grep sshdroot 1146 0.0 0.0 105996 440 ? Ss 13:21 0:00 /usr/sbin/sshd -Droot99426 0.0 0.1 147784 5360 ? Ss 18:05 0:00 sshd: root@pts/0root100418 0.0 0.0 112680 984 pts/0 S+ 19:12 0:00 grep --color=auto sshd

3.多分支结构

语句应用实例

[root@server ~]# cat chengji.sh#!/bin/bash# get student's graderead -p "输入考试成绩,范围0-100:" gradeif [ $grade -ge 90 ] && [ $grade -le 100 ]then echo "你得了$grade分,优秀"elif [ $grade -ge 80 ] && [ $grade -lt 90 ]then echo "你得了$grade分,良好"elif [ $grade -ge 60 ] && [ $grade -lt 80 ]then echo "你得了$grade分,及格"elif [ $grade -ge 0 ] && [ $grade -lt 60 ]then echo "你得了$grade分,不及格"elseecho "输入错误,请重新输入"fi[root@server ~]# sh chengji.sh输入考试成绩,范围0-100:80你得了80分,良好

4.case多分支语句

case多分支语句

[root@server ~]# cat hitkey.sh#!/bin/bashread -p "请输入一个字符,并按enter键确认:" keycase "$key" in[a-z]|[A-Z])echo "你输入的是字母";;[0-9])echo "你输入的是数字";;*)echo "你输入的是空格、功能键或其他控制字符"esac[root@server ~]# sh hitkey.sh请输入一个字符,并按enter键确认:j你输入的是字母

示例2

编写一个名为myprog的系统服务脚本,通过位置变量$1指定的start、stop、restart、status控制参数,分别用来启动、停止、重启、sleep进程的状态。其中sleep用来暂停指定秒数的时间,这里仅用做测试,在实际中应将sleep改为相应后台服务的控制命令序列[root@server ~]# cat myprog#!/bin/bashcase "$1" instart)echo -n "正在启动服务..."if sleep 7200 &thenecho "OK"fi;;stop)echo -n "正则停止sleep服务..."pkill "sleep" &> /dev/nullecho "OK";;status)if pgrep "sleep" &> /dev/nullthen echo "sleep服务已经启动"else echo "sleep服务已经停止"fi;;restart)$0 stop$0 start;;*)echo "用法:$0 {start|stop|status|restart}"esac[root@server ~]# sh myprog start正在启动服务...OK

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。