shell实例应用【二】

##########################条件测试操作########################
格式1:test  条件表达式
格式2:[  条件表达式  ]
*************************************************************************************
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)

【1】
#########################预定义变量$?#########################
返回值$?为0   :表示存在此目录
[root@localhost media]# cd /dev
[root@localhost dev]# [ -d /dev/bus ]
[root@localhost dev]# echo $?
0                                                                                 //返回值为0表示条件成立
[root@localhost dev]# ll
总用量 0
crw-rw----  1 root video    10, 175 8月  21 02:29 agpgart
crw-------  1 root root     10, 235 8月  21 02:29 autofs
drwxr-xr-x  2 root root         180 8月  21 02:29 block
drwxr-xr-x  2 root root          80 8月  21 02:29 bsg
crw-------  1 root root     10, 234 8月  21 02:29 btrfs-control
drwxr-xr-x  3 root root          60 8月  21 02:29 bus
lrwxrwxrwx  1 root root           3 8月  21 02:29 cdrom -> sr0

*************************************************************************************
返回值$?(将不为0)为1时,目录不存在
[root@localhost ~]# cd /media
[root@localhost media]# [ -d /media/cdrom/Server ]
[root@localhost media]# echo $?
1                                                                                //返回值为1表示条件不成立
[root@localhost media]# ll
总用量 0

[root@localhost dev]# [ -d /media/cdrom ] && echo "YES"     //条件不成立没有此目录
[root@localhost dev]# [ -d /dev/bus ] && echo "YES"
YES                                                                                         //条件成立有此目录{bus}

【2】
####################整数值比较###############################
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)

[root@localhost dev]# Unum=`who | wc -l`                         //查看当前已登录用户
[root@localhost dev]# [ $Unum -gt 1 ] && echo "Too /many."
Too many.                                                                          //测试结果大于

****************************************提取磁盘空闲内存*************************
[root@localhost dev]# FreeCC=$( free -m |grep "Mem:" | awk '{print $6}')  
[root@localhost dev]# [ $FreeCC -lt 1024 ] && echo ${FreeCC} MB
430 MB

【3】
########################字符串比较##########################
=:字符串内容相同
!=:字符串内容不同,! 号表示相反的意思
-z:字符串内容为空

[root@localhost dev]# echo $LANG
zh_CN.UTF-8
[root@localhost dev]# [ $LANG != "en.US" ]  && echo "Not en.us"
Not en.us                                                                      // 字符串测试结果不等于

***********************************ACK*******************************************
[root@localhost dev]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?yes
[root@localhost dev]# [ $ACK = "yes" ] && echo "覆盖"
覆盖

[root@localhost dev]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?no
[root@localhost dev]# [ $ACK = "no" ] && echo "不覆盖"
不覆盖

【4】
########################逻辑测试###########################
常用的测试操作符
-a或&&:表示  “而且”的意思
-o或||:    表示  “或者”的意思
       !:       表示   “否”

[root@localhost dev]# uname -r                                        //查看内核版本
3.10.0-514.el7.x86_64
[root@localhost dev]# Mnum=$(uname -r | awk -F. '{print $1}')
[root@localhost dev]# Snum=$(uname -r | awk -F. '{print $2}')
[root@localhost dev]# [ $Mnum -ge 3 ] && [ $Snum -gt 4 ] && echo "符合要求"
符合要求

【5】
############################if条件语句#######################
单分支结构        
if     条件测试
then
       命令判断
fi

*****************
双分支结构
if     条件测试
then
       命令序列1
else
       命令序列2
fi
*****************
多分支结构
if     条件测试操作1
then
       命令序列1
elif 条件测试操作2
then
       命令序列2
else
       命令序列3
fi

*******************************单分支if语句***************************************
例1:
[root@localhost dev]# vi chkmountdir.sh
[root@localhost dev]# cat chkmountdir.sh
#!/bin/bash
MOUNT_DIR="/media/cdrom/"
if [ ! -d $MOUNT_DIR ]
then
    mkdir -p $MOUNT_DIR
fi

[root@localhost dev]# chmod +x chkmountdir.sh
[root@localhost dev]# ./chkmountdir.sh

例2:
[root@localhost opt]# vi hkmountdir.sh
[root@localhost opt]# chmod +x hkmountdir.sh
[root@localhost opt]# ./hkmountdir.sh
[root@localhost opt]# ll
总用量 33792
-rw-r--r--.  1 root root   1071074 8月   8 00:44 apr-1.6.2.tar.gz
-rw-r--r--.  1 root root    565507 8月   8 00:44 apr-util-1.6.0.tar.gz
drwxr-xr-x   2 root root         6 8月  21 06:51 cdrom
-rwxr-xr-x   1 root root        91 8月  21 06:50 hkmountdir.sh
drwxr-xr-x. 12  501 games     4096 8月   8 00:47 httpd-2.4.25
drwxr-xr-x.  2 root root         6 3月  26 2015 rh
[root@localhost opt]# cat hkmountdir.sh
#!/bin/bash
MOUNT_DIR="/opt/cdrom/"
if [ ! -d $MOUNT_DIR ]
then
    mkdir -p $MOUNT_DIR
fi


*******************************双分支if语句**************************************
[root@localhost ~]# cd /opt
[root@localhost opt]# vi pinghost.sh
[root@localhost opt]#  cat 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@localhost opt]# chmod +x pinghost.sh
[root@localhost opt]# ./pinghost.sh 192.168.30.12
Host 192.168.30.12 is up.

*****************************多分支if语句*****************************************
[root@localhost opt]# vi gradediv.sh
[root@localhost opt]# cat gradediv.sh
#!/bin/bash
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -gt 100 ]
then
    echo "$GRADE 分,大于100分了,输入有问题"
elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
    echo "$GRADE 分,优秀!"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
    echo "$GRADE 分,合格!"
else
    echo "$GRADE 分,不合格!"
fi

[root@localhost opt]# chmod +x gradediv.sh
[root@localhost opt]# ./gradediv.sh 
请输入您的分数(0-100):101
101 分,大于100分了,输入有问题
[root@localhost opt]#  ./gradediv.sh 
请输入您的分数(0-100):22
22 分,不合格!
[root@localhost opt]# ./gradediv.sh 
请输入您的分数(0-100):88
88 分,优秀!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值