700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 条件测试语句和if流程控制语句

条件测试语句和if流程控制语句

时间:2022-12-07 05:33:37

相关推荐

条件测试语句和if流程控制语句

条件测试语句和if流程控制语句

1、read命令讲解

简介

我们编写脚本的时候通常需要使用到键盘输入;而计算机通过键盘输入而读取数据;

从键盘中读取变量的值,通常在shell脚本中与用户进行交互的场合,而read命令是可以一次性读取多个变量的值;

而输入的值都是需要用空格隔开;如果没有指定变量名,读取的数据将自动复制给到特定的变量;

[root@node0 ~]# read a bliangjiawei sunjia[root@node0 ~]# echo $a $bliangjiawei sunjia

read命令

作用:通过键盘输入读取数值变量

语法:read + 选项

选项:

read + 变量–>等待输入的信息作为变量的值read + 变量+变量:可以从第一个复制给变量,其余的都给到后面的变量-s:隐藏输入的信息,可以吟唱输入的密码-t:指定输入的时间,如果在规定的时间内没有任何输入会直接跳出read-n:指定接收的输入字符的长度,-r:支持输入的内容可以是特殊符号;-p:指定输入的提示信息

[root@node0 ~]# read a bliangjiawei wujinyuan sunjia[root@node0 ~]# echo $aliangjiawei[root@node0 ~]# echo $bwujinyuan sunjia#隐藏信息[root@node0 ~]# read -s passwd[root@node0 ~]# echo $passwd123456#指定时间输入[root@node0 ~]# read -t 2 a#指定输入字符的长度[root@node0 ~]# read -n 3 alia[root@node0 ~]# ng#支持特殊符号的输入[root@node0 ~]# read -r ab、;‘’///\\\[root@node0 ~]# echo $ab、;‘’///\\\[root@node0 ~]# read -p "please input you message: " abplease input you message: liangjaiwei[root@node0 ~]# echo $abliangjaiwei#read 的脚本案例[root@node0 ~]# vim read1.sh#!/bin/bash#read example#by liangjaiwei##################################read -p "输入你的名字:" NAMEread -p "输入你的年龄:" AGEread -p "输入你的性别:" SEXcat <<EOF****************你的基本信息如下:姓名:$NAME年龄:$AGE性别:$SEX****************EOF#测试脚本[root@node0 ~]# bash read1.sh 输入你的名字:LIANGJIAWEI输入你的年龄:18输入你的性别:MAN****************你的基本信息如下:姓名:LIANGJIAWEI年龄:18性别:MAN****************

2、if流程控制语句

单分支语法格式

if+条件then命令fi

注意:$0可以用于判断命令执行的是否有问题,echo 出来的结果为0那么代表命令执行成功,如果非0,那么代表命令执行失败;

#简单的流程语句练习[root@node0 ~]# vim if-1.sh#!/bin/bash#Useage:#by liangjiawei ##########################if ls /mnt/ >/dev/zero &>1;thenecho "it is ok"fi[root@node0 ~]# bash if-1.sh it is ok

双分支语法格式

if +条件;then命令else命令fi

#练习[root@node0 ~]# vim if-2.sh#!/bin/bash#by liangjiawei #test#######################if grep root /etc/passwd; thenecho "it is root"elseecho "it not root"fi[root@node0 ~]# bash if-2.sh root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologinit is root

多分支语法格式

if + 条件测试操作1 ;then命令elif 测试条件;then命令elif 测试条件;then命令............else命令..........fi

#判断用户在系统中是否存在,是有存在家目录[root@node0 ~]# vim if-3.sh#!/bin/bash#by liangjiawei#########################read -p "input a user name :" NAMEif grep $NAME /etc/passwd ;thenecho "this user is $NAME is exists on the system"elif ls -d /home/$NAME ;thenecho "the user $NAME not exists on the system"echo "the user $NMAE has home directory"elseecho "the user $NAME not exists on the system"echo "the user $NMAE not has home directory"fi[root@node0 ~]# bash if-3.sh input a user name :liangjiaweiliangjiawei:x:1000:1000:liangjiawei:/home/liangjiawei:/bin/bashthis user is liangjiawei is exists on the system

3、test测试命令

shell中的test命令是用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试比较

语法:test+测试条件

如果测试的条件是对的、那么结果就为真,如果测试的条件是错的,那么结果就为假;使用echo $0输出的结果是0就是真的,非0就是加的;

数值的比较

这里也能够发现其实test命令其实和中括号的意思是一样的,但是中括号就得使用两边都是空格

记住:整数的比较是不能带有小数点的;

例子如下

#比较两个数字的大小[root@node0 ~]# vim test.sh#!/bin/bash#by liangjiawei###################if test 2 -eq 1 ;thenecho "it is right"elseecho "it is error"fi[root@node0 ~]# bash test.sh it is error#比较整数的大小[root@node0 ~]# vim test.sh #!/bin/bash#by liangjiawei###################read -p "Please input two number: " number1 number2if [ $number1 -gt $number2 ];thenecho "$number1 > $number2"elif [ $number1 -lt $number2 ];thenecho "$number1 < $number2"elseecho "$number1 = $number2"fi[root@node0 ~]# bash -x test.sh + read -p 'Please input two number: ' number1 number2Please input two number: 1 2+ '[' 1 -gt 2 ']'+ '[' 1 -lt 2 ']'+ echo '1 < 2'1 < 2

字符串的比较

#判断用户是否是超级用户[root@node0 ~]# vim test1.sh#!/bin/bash#by liangjiawei###################################read -p "input your name: " nameif [ $name == "root" ];thenecho "you are super administrator;"elseecho "you are a general user"fi[root@node0 ~]# bash test1.sh input your name: rootyou are super administrator;

在做字符串大小比较的时候,注意字符串的顺序;

大于号和小于号必须转义,要不然SHELL会把它当成重定向符号大于和小于它们的顺序和sort排序是不一样的在test比较测试中,它使用的是ASCII顺序,大写字母是小于小写字母的;sort刚好相反

扩展: ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

[root@node0 ~]# vim test.sh#!/bin/bash#by liangjiawei###################VAR1=testVAR2=Testif [ $VAR1 \> $VAR2 ];thenecho "$VAR1 > $VAR2"elseecho "$VAR1 < $VAR2"fi[root@node0 ~]# bash test.sh test > Test

文件比较

示例:

退出码exit ,取值范围:0-255

[root@node0 ~]# vim test.sh#!/bin/bash#by liangjiawei###################if [ -e /etc/passwd ];thenecho okelseecho errorfi[root@node0 ~]# bash test.sh ok[root@node0 ~]# test -e /etc/passwd && echo ok || echo errorok#清空日志目录[root@node0 ~]# vim clear-log.sh#!/bin/bash#clear /var/log/message#确定当前是root用户if [ $USER != "root" ];thenecho "你必须使用root 用户才能执行脚本"exit 10 #直接退出,并且返回10fi#判断文件是否存在if [ ! -f /var/log/messages ];thenecho "文件不存在"exit 12fi#保留最近100行的日志内容tail -100 /var/log/messages >> /var/log/mesg.tmp#日志清理> /var/log/messages#cat /dev/null > /var/log/messagesmv /var/log/mesg.tmp /var/log/messagesecho "Logs clean up "#测试[root@node0 ~]# cat /var/log/messages[root@node0 ~]# bash clear-log.sh Logs clean up

4、流程控制过程中复杂条件和通配符

判断第一种

两个条件都为真或者有一个为真就执行

if [ 条件判断一 ] &&(||) [ 条件判断二 ];then命令一elif [ 条件判断三 ] &&(||) [ 条件判断四 ];then命令二else执行其他的fi

判断第二种

if [ 条件判断一 -a(-o) 条件判断二 -a(-o) 条件判断三 ];thenelif [条件判断三 -a (-o) 条件判断四 ]; thenelse执行其它fi

判断第三种

if [[条件判断一 && (||) 条件判断二 ]]; thenelif [[ 条件判断三 && (||) 条件判断四 ]]; thenelse执行其它fi

参考一下umask的配置

[root@node0 ~]# vim /etc/profile......if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; thenumask 002elseumask 022fi

双括号和单括号的区别

[ [ …… ] ] 和 [ …… ]

双括号运算符是单括号运算符的扩充;

[ … ]能够支持通配符符号且不需要转义符

#支持通配符[root@node0 ~]# if [[ $USER == r* ]];then echo "hello $USER" ;else echo "$USER not";fihello root注: $USER == r*对比时, r* 表示以r开头的任意长度字符串,这样就包括root#使用单括号的用法[root@node0 ~]# if [ $USER == r* ];then echo "hello $USER" ;else echo "$USER not";firoot not#对比时r* ,就表示两个字符串 r*[root@node0 ~]# if [[ $USER == [a-z]oot ]];then echo "hello $USER";else echo "$USER not";fihello root

[[ …… ]]和[…….]的区别汇总

1、所有的字符与逻辑运算符直接用“空格”分开,不能连到一起。

2、在[ … ]表达式中,常见的> 、<需要加转义符\,大小比较

3、进行逻辑运算符&& 、||比较时;如果用的[ ]符号,则用在外面,如[… ] && [… ] || [ …]如果在[…]里面进行逻辑与或的比较,则用-a、-o进行表示,如[ x = y –a x < z –o x > m ]

4、[[… ]] 运算符只是[… ]运算符的扩充;能够支持< 、>符号运算不需要转义符;它还是以字符串比较大小。里面支持逻辑运算符 || 、 && , 不再使用-a 、-o

5、[[…]] 用 && 而不是 -a 表示逻辑“与”;用 || 而不是 -o表示逻辑“或”

6、[[… ]]可以进行算术扩展,而[ … ]不可以

7、[[…]]能用正则,而[…]不行

8、双括号(( ))用于数学表达式

9、双方括号号[[ ]]用于高级字符串处理,比如“模糊匹配”

shell中的通配符

[root@node0 ~]# ls /etc/*.conf[root@node0 ~]# ls /etc/???.conf/etc/sos.conf /etc/yum.conf

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