企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### if条件测试语句 if条件语句的单分支结构由if、then、fi关键词组成。 ![Image](https://box.kancloud.cn/30c5f4aeb18bb7035280021b096cc0ec_568x153.png) 如:判断/media/cdrom文件是否存在,若存在就结束条件判断和整个Shell脚本,反之则去创建整个目录。 vim mkcdrom.sh \#!/bin/bash DIR=”/media/cdrom” if \[ ! -e $DIR \] then mkdir -p $DIR fi if条件语句的双分支结构由if、then、else、fi关键词组成。 ![Image](https://box.kancloud.cn/fd8d10a3626670c770b23a4fe7d7cbe8_585x169.png) 如:判断某主机是否在线,根据返回值显示主机是否在线的信息 **ping命令 -c** **规定尝试的次数;-i定义每个数据包的发送间隔;-W定义等待超时时间** vim chkhost.sh \#!/bin/bash ping -c 3 -I 0.2 -W 3 $1 &> /dev/null # $1表示的是第一个参数;&>是输出重定向 if \[ $? -eq 0 \] then echo “Host $1 is On-line.” else echo “Host $1 is Off-line.” fi 执行:bash chkhost.sh 192.168.10.10(Host 192.168.10.10 is On-line.) bash chkhost.sh 192.168.10.20(Host 192.168.10.20 is Off-line.) if条件语句的多分支结构由if、then、elif、else、fi关键词组成。 ![Image](https://box.kancloud.cn/315a0b0b57a4fd4ac43f3c9966f59f9b_579x246.png) 如:判断用户输入的分数在哪个成绩区间内,然后输出Excellent、Pass、Fail等提示信息。 read 是用来读取用户输入信息,接受赋值给后面的指定变量,-p显示一定的提示信息 vim chkscore.sh \#!/bin/bash read -p “Enter your score(0-100): ”GRADE if \[ $GRADE -ge 85 \] && \[ $GRADE -le 100 \] ; then echo “$GRADE is Excellent” elif \[ $GRADE -ge 70 \] && \[ $GRADE le 84 \] ; then echo “$GRADE is Pass” else echo “$GRADE IS Fail” fi 执行:bash chkscore.sh Enter your score(0-100): 88 88 us Excellent #### for条件循环语句 for循环语句运行脚本一次性读取多个信息 ![Image](https://box.kancloud.cn/03df9e1a0bff1d5b75e160a20e008a68_560x154.png) 如:从列表文件中(users.txt)读取多个用户,然后为其逐一创建用户账户并设置密码。 vim users.txt andy barry carl duke eric george 下面通过read读取用户输入密码赋值给PASSWD变量。然后逐一用“**id 用户名**”查看用户信息。 **/dev/null是一个被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁。** vim Example.sh \#!/bin/bash read -p “Enter The Users Password :” PASSWD for UNAME in `cat users.txt` do id $UNAME &> /dev/null if \[ $? -eq 0 \] then echo “Already exists” else useradd $UNAME &> /dev/null echo “$PASSWD” | passwd --stdin $UNAME &> /dev/null if \[ $? -eq 0 \] then echo “$UNAME , Create success” else echo “$UNAME, Create failure” fi fi done 判断列表中(ipadds.txt)的主机是否在线 vim ipadds.txt 192\.168.10.10 192\.168.10.11 192\.168.10.12 vim CheckHosts.sh \#!/bin/bash HLIST=$(cat ~/ipadds.txt) ($类似于反引号`命令`) for IP in $HLIST do ping -c 3 -i 0.2 -W 3 $IP $> /dev/null if \[ $? -eq 0 \] ; then echo “Host $IP is On-line.” else echo “Host $IP is Off-line.” fi done #### while条件循环语句 while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句。 ![Image](https://box.kancloud.cn/846130f7bbfb23b6cb247ad7b6d8c30a_608x151.png) 如:编写一个猜测数值大小的脚本Guess.sh vim Guess.sh #!/bin/bash PRICE=$(expr $RANDOM % 1000) \#**(expr命令是取得结果)** TIMES=0 #(统计次数) echo “商品实际价格为0-999之间,猜猜看是多少?” while true do read -p “请输入你您猜测的价格数目:”INT **let TIMES++** # (次数自动累加) if \[ $INT -eq $PRICE \] ; then echo “恭喜您答对了,实际价格是$PRICE” echo “您总共猜了 $TIMES 次” exit 0 elif \[ $INT -gt $PRICE \] ; then echo “太高了!” else echo “太低了!” fi done #### case条件测试语句 case语句是在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试;而如果数据不在所列出的范围内,则会去执行星号(\*)中所定义的默认命令。 ![Image](https://box.kancloud.cn/c93b02e3f4f895f007fdacf4654d9b90_518x287.png) 如:提示用户输入一个字符并将其赋值给变量KEY,然后根据变量KEY的值向用户显示其值是字母、数字还是其他字符。 vim Checkkeys.sh #!/bin/bash read -p “请输入一个字符,并按ENTER键确认:”KEY case “$KEY” in \[a-z\]|\[A-Z\]) echo “您输入的是 字母。” ;; \[0-9\]) echo “您输入的是 数字。” ;; \*) echo “您输入的是 空格、功能键或其他控制字符。” esac