数值运算、条件测试、 if选择结构 蔚落 2022-05-21 12:14 90阅读 0赞 **\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#** **shell 脚本编程** **day 02** **一、数值运算** **1.整数** 1)expr 数字1 符号 数字2 加\+ 减\- 乘 '\*' 除/ 取余(求模)% expr 1 \\\* 2 expr 10 % 3 2) echo $\[数字1符号数字2\] 加\+减\-乘\*除/幂(方)\*\* 乘法操作\*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出,或$(())表达式 3)let ++ 自加1 ; -- 自减1; += ; -= ; \*= ; /= ; i=5 let i++ (6) =i +1 let i+=8 (i=i+5=13) \[root@server0 ~\]\# i=2 \[root@server0 ~\]\# let i++ \[root@server0 ~\]\# echo $i 3 \[root@server0 ~\]\# let i\*=4 \[root@server0 ~\]\# echo $i 12 \[root@server0 ~\]\# let i\*=4 \[root@server0 ~\]\# echo $i 48 ** ** **2.小数** 1)bc的数值运算 linux中计算器bc 默认只保留整数位,scale=2 保留2位小数 (windows中计算器叫calc) echo “1+3; 1.5+5 ;scale=3;2/9” | bc / 分号隔开多个表达式 2)bc的逻辑运算 0为错误,1为正确 等于== 不等于!= echo “1>2” |bc echo “2>=2” | bc echo “2!=2” | bc **二、条件测试(判断只有对错或真假)** **1.** **条件测试的基本用法** 1)语法格式 使用“test 表达式”或者\[ 表达式 \]都可以,表达式两边至少要留一个空格。 \[root@server0 ~\]\# test -z "$USER" \[root@server0 ~\]\# echo $? 返回1 /变量有定义,非空 2)常见的测试命令 **~预定义变量:**$0 当前所在的进程或脚本名;$\*所有位置变量的值;$\# 已加载的位置变量的个数; $$ 当前运行进程的PID号 ; $?命令执行后的返回状态,0正常,1或其他值异常; **~字符串:**等于==不等于!= 加单引号; \-z字串变量为空值; **~比较整数大小:**大于 大于等于 等于 不等于 小于 小于等于 -gt -ge -eq -ne -lt -le ; eq:equal ne:not equal gt:greater then ge:great or equal lt:less then le:less or equal **~检查文件状态:**\-e 存在、\-d 存在且是目录、\-f 存在且是文件、\-r 存在且可读、\-w 存在且可写、\-x 存在且可执行、!-e不存在、!-f 不存在且不为文件、!-r 不存在且不可读;\-s 非空文件;(/usr/bin 下的都可执行) **~环境变量:**USER-用户名、LOGNAME-登录名、HOME-宿主目录、SHELL-登录Shell、HOSTNAME-主机名、TERM-终端类型 **~ping:**只发送3个测试包(\-c 3)、缩短发送测试包的间隔秒数(\-i 0.2)、等待反馈的超时秒数(\-W 3)。 3)多条件组合应用**: **&& 逻辑与 、 || 逻辑或 、 ; ** 、** A; B 执行A,执行B(顺序执行,没有逻辑关系); A&&B 执行A,如果A成功,则执行B;如果A失败,则不执行B; A|| B 执行A,如果A成功,则不执行B;如果A失败,则执行B; A && B || C && D || E 从后往前看,只有对错 \#\[ -z $USER \] && echo y || echo n /$USER是空\-对,显示y;$USER不是空\-错,显示n; **2.编写脚本(简单处理)** **1)提示用户输入用户名和密码,脚本创建用户名和密码 ** (stty -echo不显示;stty echo 显示) read -p “请输入您要创建的用户名:” user id $user &>/dev/null \[ $(echo $?) -eq 0 \] && echo “用户名已存在,请重新输入!” && exit stty -echo read -p “请输入密码:” pass stty echo \[ -z $user \] && echo “您没有输入用户名!” && exit \[ -z $pass \] && echo “您没有输入密码!” && exit useradd $user echo “$pass” | passwd --stdin $user &>/dev/null echo “$user 用户创建成功,密码为\*\*\*\*\*\*” **2)每分钟判断当前登录用户的数量,如果超过3个,则发邮件给root报警【报警内容自己写】** \#!/bin/bash \#变量:当前用户个数 num=$(who | wc -l ) \#发a.txt的内容给root用户,标题不为中文 \[ $num -ge 3 \] && mail -s "chen jinggao!" root < /chen/a.txt \[root@room5pc02 桌面\]\# crontab -e \*/1 \* \* \* \* sh /chen/..../mail.sh \[root@room5pc02 桌面\]\# crontab -l /查看计划任务 \[root@room5pc02 桌面\]\# crontab -r /删除所有计划任务 \[root@room5pc02 桌面\]\#tail -20 /var/spool/mail/root \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# 安装系统,测用户数量 28 num=\`wc -l /etc/passwd\` \[ $num -ne 28 \] && mail -s "chen jinggao!" root < /chen/a.txt \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# 看硬盘剩余内存,free -h top | sed -n “4p” 第四行 num=\`free -h \` \[ $num -le 1048576 \] && mail -s "chen jinggao!" root < /chen/a.txt \# virsh nodeinfo | grep "内存大小:" \#cat /proc/meminfo | grep MemFree: \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# 如果/media/cdroom 不存在,则创建该目录 \[ ! -d /media/cdrom \] && mkdir /media/cdrom \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# ubantu \[linux\] 默认禁止root 判断你是否为管理员 \[ “$USER” = “root” \] \[ $UID -eq 0 \] 如果是则安装httpd vsftpd **三、 if选择结构** **1. 语法格式** **1)单分支结构:只能判断对的情况并执行** if \[ $UID -eq 0 \];then 命令 yum.. systemctl.. fi **2)双分支结构:判断对和错,二选一执行** if \[ 判断 \];then 命令.. else 命令.. fi **3)多分支结构:多判断,多执行** if \[ 判断 \];then 命令.. elif \[ 判断 \];then 命令.. elif \[ 判断 \];then 命令.. else 命令.. fi **2.应用** $RANDOM 随机数 \#!/bin/bash num=$\[RANDOM%5+1\] /取余数1-5 read -p "我有一个随机数,你猜:" cai if \[ $cai -eq $num \];then echo "恭喜,你猜对了!" elif \[ $num -gt $cai \];then echo "你猜小了!" else echo "你猜大了!" fi \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# 判断论坛用户等级: \#!/bin/bash read -p "请输入您的积分:" jifen if \[ $jifen -ge 90 \];then echo "神功绝世!" elif \[ $jifen -ge 80 \];then echo "登峰造极!" elif \[ $jifen -ge 70 \];then echo "炉火纯青!" elif \[ $jifen -ge 60 \];then echo "略有小成!" else echo "初学乍练!" fi \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# 检测并判断指定的主机是否可ping通 \[root@server0 ~\]\# cat test1.sh \#!/bin/bash ping -c 3 $1 &>/dev/null if \[ $? -eq 0 \];then echo "$1 is active" else echo "$1 is down" fi \# ./test1.sh 172.25.0.10 Top # **NSD SHELL DAY02** # 案例1:Shell中的数值运算 案例2:条件测试操作 案例3:使用if选择结构 ## **1 案例1:Shell中的数值运算** ## ### **1.1 问题** ### 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 使用expr、$\[ \]、let等整数运算工具:定义变量X=1234,然后计算X与78的四则运算及求模结果 使用bc实现小数运算操作:以交互方式计算12.34与56.78的四则运算结果,另外再以非交互方式重复上述计算,最多显示4位小数 ### **1.2 步骤** ### 实现此案例需要按照如下步骤进行。 步骤一:整数运算工具 1)使用expr命令 乘法操作应采用 \\\* 转义,避免被作为Shell通配符;参与运算的整数值与运算操作符之间需要以空格分开,引用变量时必须加$符号。 首先定义变量X=1234,然后分别计算与78的加减乘除和求模运算结果: \[root@svr5 ~\]\# X=1234 //定义变量X \[root@svr5 ~\]\# expr $X + 78 //加法 1312 \[root@svr5 ~\]\# expr $X - 78 //减法 1156 \[root@svr5 ~\]\# expr $X \\\* 78 //乘法,操作符应添加\\转义 96252 \[root@svr5 ~\]\# expr $X / 78 //除法,仅保留整除结果 15 \[root@svr5 ~\]\# expr $X % 78 //求模 64 2)使用$\[\]或$(())表达式 乘法操作\*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出。 同样对于变量X=1234,分别计算与78的加减乘除和求模运算结果: \[root@svr5 ~\]\# X=1234 \[root@svr5 ~\]\# echo $\[X+78\] 1312 \[root@svr5 ~\]\# echo $\[X-78\] 1156 \[root@svr5 ~\]\# echo $\[X\*78\] 96252 \[root@svr5 ~\]\# echo $\[X/78\] 15 \[root@svr5 ~\]\# echo $\[X%78\] 64 3)使用let命令 expr或$\[\]、$(())方式只进行运算,并不会改变变量的值;而let命令可以直接对变量值做运算再保存新的值。因此变量X=1234,在执行let运算后的值会变更;另外,let运算操作并不显示结果,但是可以结合echo命令来查看: \[root@svr5 ~\]\# X=1234 \[root@svr5 ~\]\# let X+=78 ; echo $X 1312 \[root@svr5 ~\]\# let X-=78 ; echo $X 1234 \[root@svr5 ~\]\# let X\*=78 ; echo $X 96252 \[root@svr5 ~\]\# let X/=78 ; echo $X 1234 \[root@svr5 ~\]\# let X%=78 ; echo $X 64 步骤二:小数运算工具 1)bc交互式运算 先执行bc命令进入交互环境,然后再输入需要计算的表达式。以计算小数12.34与5.678的四则运算为例,相关操作如下: \[root@svr5 ~\]\# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type \`warranty'. 12.34+56.78 //加法 69.12 12.34-56.78 //减法 \-44.44 12.34\*56.78 //乘法 700.66 12.34/56.78 //除法 0 quit //退出交互计算器 \[root@svr5 ~\]\# 2)bc非交互式运算 将需要运算的表达式通过管道操作交给bc运算。注意,小数位的长度可采用scale=N限制,除此以外也受参与运算的数值的小数位影响。以计算小数12.34与5.678的四则运算为例,相关操作如下: \[root@svr5 ~\]\# echo 'scale=4;12.34+5.678' | bc 18.018 \[root@svr5 ~\]\# echo 'scale=4;12.34-5.678' | bc 6.662 \[root@svr5 ~\]\# echo 'scale=4;12.34\*5.678' | bc 70.0665 \[root@svr5 ~\]\# echo 'scale=4;12.34/5.678' | bc 2.1733 ## **2 案例2:条件测试操作** ## ### **2.1 问题** ### 本案例要求参考PPT上的示例,分别练习以下条件测试操作: 字符串匹配 比较整数值的大小 识别文件/目录的状态 多个条件/操作的逻辑组合 ### **2.2 步骤** ### 实现此案例需要按照如下步骤进行。 步骤一:条件测试的基本用法 1)语法格式 使用“test 表达式”或者\[ 表达式 \]都可以,表达式两边至少要留一个空格。 条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即 $?),所以可以在测试后查看变量$?的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作) 。 步骤二:字符串测试 1)== 比较两个字符串是否相同 检查当前用户是否为root。 当root用户执行时: \[root@svr5 ~\]\# \[ $USER == "root" \] //测试 \[root@svr5 ~\]\# echo $? //查看结果0为对,非0为错 当普通用户执行时: \[zengye@svr5 ~\]$ \[ $USER == "root" \] NO \[zengye@svr5 ~\]$ echo $? 2)!= 比较两个字符串是否不相同 检查当前用户,如果不是root。 当普通用户执行时: \[zengye@svr5 ~\]$ \[ $USER != "root" \] 当root用户执行时: \[root@svr5 ~\]\# \[ $USER != "root" \] 3)-z 检查变量的值是否未设置(空值) \[root@svr5 ~\]\# var1="Tarena" ; var2="" \[root@svr5 ~\]\# \[ -z "$var1" \] && echo "空值" || echo "非空值" 非空值 \[root@svr5 ~\]\# \[ -z $var2 \] && echo "空值" || echo "非空值" 空值 //变量var2已设置,但无任何值,视为空 \[root@svr5 ~\]\# \[ ! -z $var1 \] //测试var1是否为非空 步骤三:整数值比较 参与比较的必须是整数(可以调用变量),比较非整数值时会出错: \[root@svr5 ~\]\# A=20.4 \[root@svr5 ~\]\# \[ $A -gt 10 \] //不支持小数比较 \-bash: \[: 20.4: integer expression expected 1)-eq 比较两个数是否相等。 \[root@svr5 ~\]\# X=20 //定义一个测试变量 \[root@svr5 ~\]\# \[ $X -eq 20 \] && echo "相等" || echo "不相等" 相等 \[root@svr5 ~\]\# \[ $X -eq 30 \] && echo "相等" || echo "不相等" 不相等 2)-ne 比较两个数是否不相等。 \[root@svr5 ~\]\# \[ $X -ne 20 \] && echo "不等于" || echo "等于" 等于 \[root@svr5 ~\]\# \[ $X -ne 30 \] && echo "不等于" || echo "等于" 不等于 3)-gt 比较前面的整数是否大于后面的整数。 \[root@svr5 ~\]\# \[ $X -gt 10 \] && echo "大于" || echo "否" 大于 \[root@svr5 ~\]\# \[ $X -gt 20 \] && echo "大于" || echo "否" 否 \[root@svr5 ~\]\# \[ $X -gt 30 \] && echo "大于" || echo "否" 否 4)-ge 比较前面的整数是否大于或等于后面的整数。 \[root@svr5 ~\]\# \[ $X -ge 10 \] && echo "大于或等于" || echo "否" 大于或等于 \[root@svr5 ~\]\# \[ $X -ge 20 \] && echo "大于或等于" || echo "否" 大于或等于 \[root@svr5 ~\]\# \[ $X -ge 30 \] && echo "大于或等于" || echo "否" 否 5)-lt 比较前面的整数是否小于后面的整数。 \[root@svr5 ~\]\# \[ $X -lt 10 \] && echo "小于" || echo "否" 否 \[root@svr5 ~\]\# \[ $X -lt 20 \] && echo "小于" || echo "否" 否 \[root@svr5 ~\]\# \[ $X -lt 30 \] && echo "小于" || echo "否" 小于 6)-le 比较前面的整数是否小于或等于后面的整数。 \[root@svr5 ~\]\# \[ $X -le 10 \] && echo "小于或等于" || echo "否" 否 \[root@svr5 ~\]\# \[ $X -le 20 \] && echo "小于或等于" || echo "否" 小于或等于 \[root@svr5 ~\]\# \[ $X -le 30 \] && echo "小于或等于" || echo "否" 小于或等于 7)提取当前登录的用户数,比较是否超过5。 \[root@svr5 ~\]\# who | wc -l //确认已登录的用户数 4 \[root@svr5 ~\]\# N=$(who | wc -l) //赋值给变量N \[root@svr5 ~\]\# \[ $N -gt 5 \] && "超过了" || echo "没超过" 没超过 上述赋值给变量N及与5比较的操作,可以简化为如下形式: \[root@svr5 ~\]\# \[ $(who | wc -l) -gt 5 \] && "超过了" || echo "没超过" 没超过 步骤四:识别文件/目录的状态 1)-e 判断对象是否存在(不管是目录还是文件) \[root@svr5 ~\]\# \[ -e "/usr/src/" \] && echo "存在" || echo "不存在" 存在 \[root@svr5 ~\]\# \[ -e "/etc/fstab" \] && echo "存在" || echo "不存在" 存在 \[root@svr5 ~\]\# \[ -e "/home/nooby" \] && echo "存在" || echo "不存在" 不存在 2)-d 判断对象是否为目录(存在且是目录) \[root@svr5 ~\]\# \[ -d "/usr/src/" \] && echo "是目录" || echo "不是目录" 是目录 \[root@svr5 ~\]\# \[ -d "/etc/fstab" \] && echo "是目录" || echo "不是目录" 不是目录 \[root@svr5 ~\]\# \[ -d "/home/nooby" \] && echo "是目录" || echo "不是目录" 不是目录 3)-f 判断对象是否为文件(存在且是文件) \[root@svr5 ~\]\# \[ -f "/usr/src/" \] && echo "是文件" || echo "不是文件" 不是文件 \[root@svr5 ~\]\# \[ -f "/etc/fstab" \] && echo "是文件" || echo "不是文件" 是文件 \[root@svr5 ~\]\# \[ -f "/home/nooby" \] && echo "是文件" || echo "不是文件" 不是文件 4)-r 判断对象是否可读 此测试对root用户无效,无论文件是否设置r权限,root都可读: \[root@svr5 ~\]\# cp install.log /tmp/rtest.txt //复制一个文件做测试 \[root@svr5 ~\]\# chmod -r /tmp/rtest.txt //去掉所有的r权限 \[root@svr5 ~\]\# ls -ld /tmp/rtest.txt //确认设置结果 \--w------- 1 root root 33139 12-11 10:43 /tmp/rtest.txt \[root@svr5 ~\]\# \[ -r "/tmp/rtest.txt" \] && echo "可读" || echo "不可读" 可读 //root测试结果仍然可读 切换为普通用户,再执行相同的测试,结果变为“不可读”: \[zengye@svr5 ~\]$ \[ -r "/tmp/rtest.txt" \] && echo "可读" || echo "不可读" 不可读 普通用户只对自己拥有r权限的文件或目录,-r测试时结果才成立: \[zengye@svr5 ~\]$ ls -l .bashrc \-rw-r--r-- 1 zengye zengye 124 09-24 16:44 .bashrc \[zengye@svr5 ~\]$ \[ -r ".bashrc" \] && echo "可读" || echo "不可读" 可读 5)-w 判断对象是否可写 此测试同样对root用户无效,无论文件是否设置w权限,root都可写: \[root@svr5 ~\]\# chmod -w /tmp/rtest.txt //去掉所有的w权限 \[root@svr5 ~\]\# ls -l /tmp/rtest.txt //确认设置结果 \---------- 1 root root 33139 12-11 10:43 /tmp/rtest.txt \[root@svr5 ~\]\# \[ -w "/tmp/rtest.txt" \] && echo "可写" || echo "不可写" 可写 切换为普通用户,可以正常使用\-w测试: \[zengye@svr5 ~\]$ ls -l /tmp/rtest.txt \---------- 1 root root 33139 12-11 10:52 /tmp/rtest.txt \[zengye@svr5 ~\]$ \[ -w "/tmp/rtest.txt" \] && echo "可写" || echo "不可写" 不可写 \[zengye@svr5 ~\]$ ls -l .bashrc \-rw-r--r-- 1 zengye zengye 124 09-24 16:44 .bashrc \[zengye@svr5 ~\]$ \[ -w ".bashrc" \] && echo "可写" || echo "不可写" 可写 6)-x 判断对象是否具有可执行权限 这个取决于文件本身、文件系统级的控制,root或普通用户都适用: \[root@svr5 ~\]\# chmod 644 /tmp/rtest.txt //重设权限,无x \[root@svr5 ~\]\# ls -l /tmp/rtest.txt //确认设置结果 \-rw-r--r-- 1 root root 33139 12-11 10:52 /tmp/rtest.txt \[root@svr5 ~\]\# \[ -x "/tmp/rtest.txt" \] && echo "可执行" || echo "不可执行" 不可执行 \[root@svr5 ~\]\# chmod +x /tmp/rtest.txt //添加x权限 \[root@svr5 ~\]\# \[ -x "/tmp/rtest.txt" \] && echo "可执行" || echo "不可执行" 可执行 步骤五:多个条件/操作的逻辑组合 1)&&,逻辑与 给定条件必须都成立,整个测试结果才为真。 检查变量X的值是否大于10,且小于30: \[root@svr5 ~\]\# X=20 //设置X变量的值为20 \[root@svr5 ~\]\# \[ $X -gt 10 \] && \[ $X -lt 30 \] && echo "YES" YES 多个条件组合时,可以使用 \[\[ .. \]\] 界定,比如上述测试可以改为如下: \[root@svr5 ~\]\# \[\[ $X -gt 10 && $X -lt 30 \]\] && echo "YES" YES 2)||,逻辑或 只要其中一个条件成立,则整个测试结果为真。 检查变量X的值是否小于10或者小于30: \[root@svr5 ~\]\# \[\[ $X -lt 10 || $X -lt 30 \]\] && echo "YES" YES 只要/tmp/、/var/spool/目录中有一个可写,则条件成立: \[root@svr5 ~\]\# \[ -w "/tmp/" \] || \[ -w "/var/spool/" \] && echo "OK" OK ## **3 案例3:使用if选择结构** ## ### **3.1 问题** ### 本案例要求编写3个Shell脚本,分别实现以下目标: 检测/media/cdrom目录,若不存在则创建 检测并判断指定的主机是否可ping通 从键盘读取一个论坛积分,判断论坛用户等级,等级分类如下: 大于等于90 神功绝世 大于等于80,小于90 登峰造极 大于等于70,小于80 炉火纯青 大于等于60,小于70 略有小成 大于60 初学乍练 ### **3.2 方案** ### if单分支的语法组成: if 条件测试 then 命令序列 fi if双分支的语法组成: if 条件测试 then 命令序列1 else 命令序列2 fi if多分支的语法组成: if 条件测试1 then 命令序列1 elif 条件测试2 then 命令序列2 else 命令序列n fi if多分支结构实际上相当于多层if嵌套: if 条件测试1 ; then 命令序列1 else if 条件测试2 ; then 命令序列2 else .. .. 命令序列n fi fi ### **3.3 步骤** ### 实现此案例需要按照如下步骤进行。 步骤一:检测/media/cdrom目录,若不存在则创建 1)编写脚本如下: \[root@svr5 ~\]\# vim chkmountdir.sh \#!/bin/bash MOUNT\_DIR="/media/cdrom/" if \[ ! -d $MOUNT\_DIR \] then mkdir -p $MOUNT\_DIR fi \[root@svr5 ~\]\# chmod +x chkmountdir.sh //添加可执行权限 2)测试、验证脚本功能 \[root@svr5 ~\]\# ls -ld /media/cdrom //本来没有/media/cdrom目录 ls: /media/cdrom: 没有那个文件或目录 \[root@svr5 ~\]\# ./chkmountdir.sh //执行脚本 \[root@svr5 ~\]\# ls -ld /media/cdrom //再检查已经有了 drwxr-xr-x 2 root root 4096 12-11 15:16 /media/cdrom 有了/media/cdrom文件夹以后,再次执行上述脚本,实际上不做任何有效操作: \[root@svr5 ~\]\# ./chk\_bakdir.sh \[root@svr5 ~\]\# 步骤二:检测并判断指定的主机是否可ping通 1)分析任务需求 使用ping命令检测目标主机时,人工可直接判断反馈结果,而脚本却不方便。但是当ping测试成功时,执行状态$?的值为0;而ping测试失败时,$?的值不为0。因此在Shell脚本中可以利用这一点来判断ping目标主机的成败。 为了节省ping测试时间,可以只发送3个测试包(-c 3)、缩短发送测试包的间隔秒数(-i 0.2)、等待反馈的超时秒数(-W 3)。比如,检查可ping通的主机: \[root@svr5 ~\]\# ping -c 3 -i 0.2 -W 3 192.168.4.5 PING 192.168.4.5 (192.168.4.5) 56(84) bytes of data. 64 bytes from 192.168.4.5: icmp\_seq=1 ttl=64 time=0.131 ms 64 bytes from 192.168.4.5: icmp\_seq=2 ttl=64 time=0.076 ms 64 bytes from 192.168.4.5: icmp\_seq=3 ttl=64 time=0.073 ms \--- 192.168.4.5 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 402ms rtt min/avg/max/mdev = 0.073/0.093/0.131/0.027 ms \[root@svr5 ~\]\# echo $? //执行状态表示成功 0 2)脚本编写参考如下: \[root@svr5 ~\]\# vim pinghost.sh \#!/bin/bash ping -c 3 -i 0.2 -W 3 $1 &> /dev/null if \[ $? -eq 0 \] ; then echo "Host $1 is up." else echo "Host $1 is down." fi \[root@svr5 ~\]\# chmod +x pinghost.sh 3)测试、验证脚本功能 \[root@svr5 ~\]\# ./pinghost.sh 192.168.4.5 Host 192.168.4.5 is up. \[root@svr5 ~\]\# ./pinghost.sh 192.168.4.50 Host 192.168.4.50 is down. 步骤三:从键盘读取一个论坛积分,判断论坛用户等级 1)脚本编写参考如下: 大于等于90 神功绝世 大于等于80,小于90 登峰造极 大于等于70,小于80 炉火纯青 大于等于60,小于70 略有小成 大于60 初学乍练 \[root@svr5 ~\]\# vim gradediv.sh \#!/bin/bash read -p "请输入积分(0-100):" JF if \[ $JF –ge 90 \] ; then echo "$JF 分,神功绝世" elif \[ $JF –ge 80 \] ; then echo "$JF 分,登峰造极" elif \[ $JF –ge 70 \] ; then echo "$JF 分,炉火纯青" elif \[ $JF –ge 60 \] ; then echo "$JF 分,略有小成" else echo "$JF 分,初学乍练" fi \[root@svr5 ~\]\# chmod +x gradediv.sh 2)测试、验证脚本 \[root@svr5 ~\]\# ./gradediv.sh 请输入积分(0-100):74 74 分,炉火纯青 \[root@svr5 ~\]\# ./gradediv.sh 请输入分数(0-100):68 68 分,略有小成 \[root@svr5 ~\]\# ./gradediv.sh 请输入分数(0-100):87 87 分,登峰造极
还没有评论,来说两句吧...