标签:定义 mkdir 接下来 inux 操作 条件表达式 nbsp 输出重定向 复杂度
学习是一个登堂入室,由浅入深的过程。在学习完Linux命令,掌握shell脚本语法变量和接受用户输入的信息之后,就要踏上新的高度——能够进一步处理接收到的用户参数。
系统在执行mkdir命令时会判断用户输入的信息,即判断用户指定的文件夹名称是否存在,如果存在则提示报错;反之则自动创建。shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。切记,条件表达式两边均应有一个空格。
按照测试对象来划分,条件测试语句可以分为四种:
文件测试语句;
逻辑测试语句;
整数之比较语句;
字符串比较语句;
文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符。
文件测试所用的参数
操作符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同效果。例如在shell终端中逻辑 “与” 的运算符号是&&,它表示当前的命令执行成功后才会执行它后面的命令,因此可以用来判断/dev/cdrom文件是否存在,若存在则输出Exist字样。
除了逻辑 “与” 外,还有逻辑 “或” ,它在Linux系统中的运算符号为 || ,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录的用户是否为非管理员身份。
第三种逻辑语句是 “非” ,在Linux系统中的运算符号是一个叹号 (!),它表示把条件测试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的;原本测试错误的结果则将其变成正确的。
我们现在切换回到root管理员身份,再判断当前用户是否为一个非管理员的用户。由于判断结果因为两次否定而变成正确,因此会正常地输出预设信息。
当前我们正在登录的的即为管理员用户——root。先判断当前登录用户的USER变量名称是否等于root,然后用逻辑运算符 “非” 进行取反操作,效果就变成了判断当前登录的用户是否为非管理员用户了。最后若条件成立则会根据逻辑 “与” 运算符输出user字样;或者条件不满足则会通过逻辑 “或” 运算符输出root字样,而如果前面的&&不成立才会执行后面的||符号。
字符串比较运算符仅是对数字的操作,不能将数字与字符串,文件等内容一起操作,而且不能想当然地使用日常生活中的等号,大于号,小于号的来判断。因为等号与赋值命令符冲突,大于号和小于号分别输出重定向命令符和输入重定向命令符冲突。因此一定要使用规范的整数比较运算符来进行操作。
可用的整数比较运算符
操作符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
曾经讲过free命令,它可以用来获取当前系统正在使用及可用的内存量信息。接下来先使用free -m命令查看内存使用量情况(单位为MB),然后通过grep Mem:命令过滤出剩余内存量的行,再用awk `{print $4}`命令只保留第四列,最后用FreeMem=`语句`的方式把语句内执行的结果执行的结果赋值给变量。
字符串比较语句用于判断字符串是否为空值,或两个字符串是否相同。他经常用来判断某变量是否未被定义(即内容为空值),理解起来也比较简单。
常见的字符串比较运算符
操作符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
if条件测试语句
if条件测试语句可以让脚本根据实际情况自动执行相应的命令。从技术角度来讲,if语句分为单分支结构,双分支结构,多分支结构;其复杂度随着灵活度一起逐级上升。
if条件语句的单分支结构由if,then,fi关键词组成,而且只在条件成立后才执行预设命令,相当于口语 “如果.....那么.......”。单分支的if语句属于最简单的一种条件判断语句,语法格式。
由于第五章才讲解用户身份与权限,因此这里继续用 “bash 脚本名称” 的方式来执行脚本。在正常情况下,顺利执行完脚本文件后设有任何输出信息,但是可以使用ls命令验证/media/cdrom目录是否已经成功创建。
if条件测试语句的双分支结构由if,then,else,fi关键词组成,它进行一次条件匹配判断,如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令,相当于口语的 “如果.....那么.....或者......那么......”。if条件语句的双分支结构也是一种很简单的判断结构。
使用双分支的if条件语句来验证某台主机是否在线,然后根据返回值的结果,要么显示主机不在线信息。这里的脚本主要使用ping命令来测试与对方主机的网络连通性,而Linux系统中的ping命令不像Windows一样尝试4次就结束,因此为了避免用户等待时间过长,需要通过-c参数来规定尝试的次数,并使用-i参数定义每个数据包的发送间隔,以及使用-w参数定义等待超时时间。
if条件语句的多分枝结构由if,then,else,elif,fi关键词组成,它进行多次条件匹配判断,这次判断中的任何一项在匹配成功后都会执行相应的预设命令,相当于口语的 “如果....那么......如果.....那么.....。”if条件语句的多分支结构是工作中最常使用的一种条件判断结构,尽管相对复杂但是更加灵活。
使用多分支的if条件语句来判断用户输入的分数在哪个成绩区,然后输出如Excellent,pass,Fail等提示信息。在Linux系统中,read是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量,-p参数用于向用户显示一定的提示信息。在下面的脚本示例中,只有当用户输入的分数大于等于85分且小于等于100分,才能输出Excellent字样;若分数不满足该条件(即匹配不成功),则继续判断分数是否大于等于70分且小于等于84分,如果是,则输出Pass字样;若两次都落空(即两次的匹配操作都失败了),则输出Fail字样。
2020-09-23 18:11:59
标签:定义 mkdir 接下来 inux 操作 条件表达式 nbsp 输出重定向 复杂度
原文地址:https://www.cnblogs.com/were/p/13720078.html