条件判断 if结构
Top
NSD SHELL DAY02
1 案例1:Shell中的数值运算1.1 问题本案例要求熟悉Linux Shell环境的特点,主要练习以下操作:
1.2 步骤实现此案例需要按照如下步骤进行。 步骤一:整数运算工具 1)使用expr命令 乘法操作应采用 * 转义,避免被作为Shell通配符;参与运算的整数值与运算操作符之间需要以空格分开,引用变量时必须加$符号。 首先定义变量X=1234,然后分别计算与78的加减乘除和求模运算结果:
2)使用$[]或$(())表达式 乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出。 同样对于变量X=1234,分别计算与78的加减乘除和求模运算结果:
3)使用let命令 expr或$[]、$(())方式只进行运算,并不会改变变量的值;而let命令可以直接对变量值做运算再保存新的值。因此变量X=1234,在执行let运算后的值会变更;另外,let运算操作并不显示结果,但是可以结合echo命令来查看:
步骤二:小数运算工具 1)bc交互式运算 先执行bc命令进入交互环境,然后再输入需要计算的表达式。以计算小数12.34与5.678的四则运算为例,相关操作如下:
2)bc非交互式运算 将需要运算的表达式通过管道操作交给bc运算。注意,小数位的长度可采用scale=N限制,除此以外也受参与运算的数值的小数位影响。以计算小数12.34与5.678的四则运算为例,相关操作如下:
2 案例2:条件测试操作2.1 问题本案例要求参考PPT上的示例,分别练习以下条件测试操作:
2.2 步骤实现此案例需要按照如下步骤进行。 步骤一:条件测试的基本用法 1)语法格式 使用“test 表达式”或者[ 表达式 ]都可以,表达式两边至少要留一个空格。 条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即 $?),所以可以在测试后查看变量$?的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作) 。 步骤二:字符串测试 1)== 比较两个字符串是否相同 检查当前用户是否为root。 当root用户执行时:
当普通用户执行时:
2)!= 比较两个字符串是否不相同 检查当前用户,如果不是root。 当普通用户执行时:
当root用户执行时:
3)一行执行多条命令的情况
4) -z 检查变量的值是否未设置(空值)
步骤三:整数值比较 参与比较的必须是整数(可以调用变量),比较非整数值时会出错:
1)-eq 比较两个数是否相等。
2)-ne 比较两个数是否不相等。
3)-gt 比较前面的整数是否大于后面的整数。
4)-ge 比较前面的整数是否大于或等于后面的整数。
5)-lt 比较前面的整数是否小于后面的整数。
6)-le 比较前面的整数是否小于或等于后面的整数。
7)提取当前登录的用户数,比较是否超过5。
上述赋值给变量N及与5比较的操作,可以简化为如下形式:
步骤四:识别文件/目录的状态 1)-e 判断对象是否存在(不管是目录还是文件)
2)-d 判断对象是否为目录(存在且是目录)
3)-f 判断对象是否为文件(存在且是文件)
4)-r 判断对象是否可读 此测试对root用户无效,无论文件是否设置r权限,root都可读:
切换为普通用户,再执行相同的测试,结果变为“不可读”:
5)-w 判断对象是否可写 此测试同样对root用户无效,无论文件是否设置w权限,root都可写:
切换为普通用户,可以正常使用-w测试:
6)-x 判断对象是否具有可执行权限 这个取决于文件本身、文件系统级的控制,root或普通用户都适用:
步骤五:多个条件/操作的逻辑组合 1)&&,逻辑与 给定条件必须都成立,整个测试结果才为真。 检查变量X的值是否大于10,且小于30:
2)||,逻辑或 只要其中一个条件成立,则整个测试结果为真。 只要/tmp/、/var/spool/目录中有一个可写,则条件成立:
3 案例3:使用if选择结构3.1 问题本案例要求编写3个Shell脚本,分别实现以下目标:
大于等于90 神功绝世 大于等于80,小于90 登峰造极 大于等于70,小于80 炉火纯青 大于等于60,小于70 略有小成 小于60 初学乍练 3.2 方案if单分支的语法组成:
if双分支的语法组成:
if多分支的语法组成:
if多分支结构实际上相当于多层if嵌套:
3.3 步骤实现此案例需要按照如下步骤进行。 步骤一:检测/media/cdrom目录,若不存在则创建 1)编写脚本如下:
2)测试、验证脚本功能
有了/media/cdrom文件夹以后,再次执行上述脚本,实际上不做任何有效操作:
步骤二:检测并判断指定的主机是否可ping通 1)分析任务需求 使用ping命令检测目标主机时,人工可直接判断反馈结果,而脚本却不方便。但是当ping测试成功时,执行状态$?的值为0;而ping测试失败时,$?的值不为0。因此在Shell脚本中可以利用这一点来判断ping目标主机的成败。 为了节省ping测试时间,可以只发送3个测试包(-c 3)、缩短发送测试包的间隔秒数(-i 0.2)、等待反馈的超时秒数(-W 3)。比如,检查可ping通的主机:
2)脚本编写参考如下:
3)测试、验证脚本功能
步骤三:从键盘读取一个论坛积分,判断论坛用户等级 1)脚本编写参考如下: 大于等于90 神功绝世 大于等于80,小于90 登峰造极 大于等于70,小于80 炉火纯青 大于等于60,小于70 略有小成 大于60 初学乍练
3)测试、验证脚本
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 使用sed为标签添加背景颜色?
- linux – 打包Perl Mojolicious Web应用程序
- linux – rsync:无法摆脱密码提示
- macos – Virtualbox / Vagrant共享文件夹:OS X和Linux上的
- linux – 通过网络复制后稀疏文件显着增大(但仍然稀疏)
- linux – Xen 4.1主机(dom0)与blktap磁盘(“tap:aio:”)没
- 如何检测linux中的隐藏进程?
- linux – 从/ var / spool / mail / root读取邮件
- linux – GNUPLOT无法放大
- linux – 如何在进程结束后自动关闭`qemu`的执行?