当前位置:首页 > linux基础 > 正文内容

Shell介绍(四)条件表达式,字符串比对

5年前 (2019-09-08)linux基础592
条件表达式
[ ]======test   []常用
[ -f file ] 文件是否存在 且为普通文件 重点
[ -e file ] 文件存在则为真
[ -d file ] 目录存在则为真 重点
[ -x file ] 文件有执行权限则为真
[ -w file ] 文件可写则为真
[ -r file ] 文件可读则为真
[root@web01 scripts]# [ -f /etc/hosts ] && echo 为真 || echo 为假
为真


函数库使用

[root@web01 scripts]# cat ping.sh 
#!/bin/sh
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
read -p "请输入一个网址: " url
ping -c 1 -W 1 $url >/dev/null 2>&1
[ $? -eq 0 ] && action "ping $url is" /bin/true || action "ping $url is" /bin/false


数值的比较

-eq   相等
-ne   不等于
-gt   大于
-ge   大于等于
-lt   小于
-le   小于等于
[root@web01 scripts]# [ 10 -eq 10 ] && echo ok || echo error
ok
[root@web01 scripts]# [ 10 -gt 10 ] && echo ok || echo error
error
字符串比对
[ "name" = "name" ] #等于
[ "name" != "name" ] #不等于
[root@web ~]# echo $USER
root
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $?
0
[root@web ~]# [ "$USER" = "alex" ]
[root@web ~]# echo $?
1


-z #字符串长度为0为真, -n #字符串长度不为0为真

[root@web ~]# name=""
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
0
[root@web ~]# [ ! -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# name="alex"
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# [ -n $name ]
[root@web ~]# echo $?
0


正则比对

[[ ]]=~ 匹配
[root@web01 scripts]# [[ "$USER" =~ ^r ]]#以r开头
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ t$ ]]#以t结尾
[root@web01 scripts]# echo $?
0


多整数比对

-a  and(并且)
-o  or   (或者)
[root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [[ 10 -eq 10 || 100 -ne 100 ]]
[root@web01 scripts]# echo $?
0
案例: 传入两个数字 比对两个数字的大小
sh count.sh 10 10 要求判读是否传入两个参数 要求数字加判读是否为整数 10=10
#!/bin/sh
[ $# -ne 2 ] && echo "please input two number" && exit
[[ ! $1 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 50
[[ ! $2 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 100
[ $1 -eq $2 ] && echo "$1=$2"
[ $1 -gt $2 ] && echo "$1>$2"
[ $1 -lt $2 ] && echo "$1<$2"
案例:批量创建用户 批量创建10个用户 oldboy1 oldboy2 oldboy3...oldboy10
要求密码统一设置为123456
1.输入用户的前缀  oldboy
判断如果为空 则退出
2.输入需要创建用户的个数 10
判断是否为整数
[root@web01 scripts]# cat useradd.sh 
#!/bin/sh
read -p "please input prefix: " name
read -p "创建的个数: " num
for i in `seq $num`
do
    useradd $name$i >/dev/null 2>&1
    echo 123456|passwd --stdin $name$i &>/dev/null
    [ $? -eq 0 ] && echo "$name$i create is ok"
done
案例: 判断当前10.0.0.0/24网络中 有哪些IP地址在线 ping通则在线
[root@web01 scripts]# cat ping.sh 
#!/bin/sh
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
for i in `seq 254`
do
    { IP=10.0.0.$i
    ping -c 1 -W 1 $IP >/dev/null 2>&1
    [ $? -eq 0 ] && action "ping $IP is" /bin/true
} &
done


字符串比对

字符串必须使用双引号
[ "name" = "name" ] #等于
[ "name" != "name" ]#不等于
-z#字符串个数等于0  -n#字符串个数不等于0
-z 案例:
read -p "请输入名字" name1 
[ -z $name1 ] && echo "请输入姓名否则不继续执行" && exit
read -p "请输入年龄" age1
echo $name1 $age1


判读传参的参数是否为整数

方法1
[root@web01 scripts]# age=188
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# age=188q
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] && echo $?
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] || echo $?
1
[root@web01 scripts]# age=18.8
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
1


方法2

expr $1 + 0 >/dev/null 2>&1
[ $? -ne 0 ] && exit


多整数比对

-a  and && #并且
-o  or || #或者
[ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# [ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ]
[root@web01 scripts]# echo $?
0


案例: 传入两个数字 比对两个数字的大小

#!/bin/sh
[ $# -ne 2 ] && echo "please input two number" && exit
[[ ! $1 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 50
[[ ! $2 =~ ^[0-9]+$ ]] && echo "请输入整数" && exit 100
[ $1 -eq $2 ] && echo "$1=$2"
[ $1 -gt $2 ] && echo "$1>$2"
[ $1 -lt $2 ] && echo "$1<$2"
案例:批量创建用户 批量创建10个用户
要求密码统一设置为123456
1.输入用户的前缀  oldboy
判断如果为空 则退出
2.输入需要创建用户的个数 10
判断是否为整数
[root@web01 scripts]# cat useradd.sh
#!/bin/sh
#read -p "please input prefix: " name
#read -p "创建的个数: " num
for i in {1..10}
do
    echo oldboy$i
done

[root@web01 scripts]# cat useradd.sh 
#!/bin/sh
read -p "please input prefix: " name
read -p "创建的个数: " num
for i in `seq $num`
do
    useradd $name$i >/dev/null 2>&1
    echo 123456|passwd --stdin $name$i &>/dev/null
    [ $? -eq 0 ] && echo "$name$i create is ok"
done


“Shell介绍(四)条件表达式,字符串比对” 的相关文章

Linux-yum软件管理

Linux-yum软件管理

YUM基本介绍1.什么是YUMYum是RedHat以及CentOS中的软件包管理器。能够通过互联网下载 .rpm 包并且安装,并可以自动处理依赖性关系,无须繁琐地一次次下载、安装。2.YUM源是什么1要成功的使用 YUM 工具安装更新软件或系统,就需要有一个包含各种 rpm 软件包的reposito...

sersync实时同步

sersync实时同步

实时同步概述实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。保证数据的连续性, 减少人力维护成本,解决nfs单点故障实时同步工具选择sersync+rsync(√)、inotify+rsyncInotify是一个通知接口,用来监控文件系统的各种变化,如果...

NFS文件共享存储

NFS文件共享存储

NFS基本概述NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分...

Shell介绍(一)变量、传参、数值运算

Shell编程1.什么情况下使用Shell1:安装CentOS系统 自动化安装操作系统(kickstart cobbler) 底层shell2:网络IP地址3:初始化操作系统(ntp时间同步,更改默认YUM源,SSH端口,SSH远程连接禁止DNS解析,禁止root登录,关闭seilnux,防火墙优化...

Shell介绍(二)函数,数组

函数命令的集合 完成特定功能的代码块模块化 复用函数和变量类似 只有先定义才可以调用,如果只定义不调用 则不会执行函数的定义和调用三种方法:[root@web scripts]# cat fun.sh #!/bin/sh test1(){   ...

Shell介绍(三)if判断,case控制,for循环,while循环,流程控制语句

if判断单分支if [你有房] then     我就嫁给你 fi多分支if [ 你有房 ] then     我就嫁给你 else   &nbs...