Shell脚本入门03

2019-08-06 分类:Shell 阅读(71) 评论(0)
1.条形表达式

[]=========test     []常用
[ -f file ]  文件是否存在 且为普通文件  重点
[ -e file ] 文件存在则为真
[ -d file ] 目录存在则为真
[ -x file ] 文件有执行权限则为真
[ -w file ] 文件可写则为真
[ -r file] 文件可读则为真

使用方法:
[root@web02 ~]# [ -f /etc/hosts ] && echo "真" || echo "假"
真
[root@web02 ~]# [ -f /etc/hostsss ] && echo "真" || echo "假"
假
[root@web02 ~]# [ -d /etc/hosts ] && echo "真" || echo "假"
假
[root@web02 ~]# [ ! -d /etc/hosts ] && echo "真" || echo "假"
真
[root@web02 ~]# [ -e /etc/hosts ] && echo "真" || echo "假"
真
[root@web02 ~]# [ -e /etc/ ] && echo "真" || echo "假"
真
[root@web02 ~]# [ -r /etc/ ] && echo "真" || echo "假"
真
[root@web02 ~]# [ -w /etc/ ] && echo "真" || echo "假"
真
[root@web02 ~]# [ -x /etc/ ] && echo "真" || echo "假"
真

-f 判断文件是否存在
例如:
[root@web02 ~]# [ -f /etc/init.d/functions ] && . /etc/init.d/functions
[root@web02 ~]# action "hehehe is" /bin/true
hehehe is [ OK ]
[root@web02 ~]# action "hehehe is" /bin/false
hehehe is [FAILED]
写一个ping网络脚本代码如下:
#!/bin/sh
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
read -p "请输入您要ping的网址:" 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
[root@web02 ~]# sh ping.sh
请输入您要ping的网址:pdboke.com
ping pdboke.com is [ OK ]
[root@web02 ~]# sh ping.sh
请输入您要ping的网址:sadsadas
ping sadsadas is [FAILED]

-d 判断是否为目录 目录是否存在
例如:
[root@web02 ~]# [ -d /lisong ] || mkdir /lisong
[root@web02 ~]# ll /lisong/ -d
drwxr-xr-x 2 root root 6 Aug 6 09:57 /lisong/
[root@web02 ~]# test -f /etc/hosts && echo ok || echo error
ok
[root@web01 scripts]# test -d /etc/hosts && echo ok || echo error
error
[root@web01 scripts]# test -d /etc/ && echo ok || echo error
ok

2.数值比较
[数值1 比较符 数值2]
比较符:
-eq  等于
-ne  不等于
-gt  大于
-ge  大于等于
-lt  小于
-le  小于等于
例如:
[root@web02 ~]# [ 10 -eq 10 ] && echo "OK" || echo "error"
OK
[root@web02 ~]# [ 10 -ne 10 ] && echo "OK" || echo "error"
error
[root@web02 ~]# [ 12 -gt 10 ] && echo "OK" || echo "error"
OK
[root@web02 ~]# [ 10 -ge 10 ] && echo "OK" || echo "error"
OK
[root@web02 ~]# [ 12 -ge 10 ] && echo "OK" || echo "error"
OK
[root@web02 ~]# [ 9 -lt 10 ] && echo "OK" || echo "error"
OK
[root@web02 ~]# [ 10 -lt 10 ] && echo "OK" || echo "error"
error
[root@web02 ~]# [ 10 -le 10 ] && echo "OK" || echo "error"
OK
[root@web02 ~]# [ 9 -le 10 ] && echo "OK" || echo "error"
OK
[root@web02 ~]# [9 -le 10] && echo "OK" || echo "error"
-bash: [9: command not found
error
PS:要注意括号后面跟空格 否则会提示未找到该命令

案例1:
统计当前磁盘的使用率 如果大于6% 则把内容写入到以日期为名称的文本中 2019-08-08.txt如果小了则写入 2019-08-08.tet
首先思考如何取出磁盘使用率?
[root@web02 ~]# df -h | awk 'NR==2 {print $(NF -1)}'
12%
[root@web02 ~]# df -h | grep /$ |awk '{print $(NF -1)}'
12%
然后思考整数的比较
脚本代码如下:
[root@web02 ~]# cat usedisk.sh 
#!/bin/sh
time=`date +%F`
usedisk=`df -h | awk 'NR==2 {print $(NF -1)}'`
[ ${usedisk%\%} -gt 6 ] && echo "当前使用率不正常 $usedisk " >> ${time}.txt || echo "当前使用率正常 $usedisk " >> ${time}.tet

代码行对比判断如下:
[root@web02 ~]# [ `df -h | awk -F "[ %]+" 'NR==2 {print $(NF -1)}'` -gt 6 ] && echo "error" || echo "OK"
error
[root@web02 ~]# [ `df -h | awk -F "[ %]+" 'NR==2 {print $(NF -1)}'` -gt 20 ] && echo "error" || echo "OK"
OK

案例2:
统计系统内存的使用率 如果大于10则 echo 使用率到 以时间命名的文件中
首先思考如何取出当前的使用率?
百分比====使用的处于总数然后乘100
然后思考整数的对比
脚本代码如下:
[root@web02 ~]# cat free.sh 
#!/bin/sh
time=`date +%F`
free=`free | awk 'NR==2 {print $3/$2*100}'`
[ ${free%.*} -gt 10 ] && echo "$free is error" > ${time}.txt || exit

案例3:
统计系统的负载 负载超过2 则发送到文件中 否则提示正常
首先思考如何查看负载情况
其次取出值做比较

3.字符串对比
字符串对比必须使用双引号
[ "name" = "name" ]
[ "name" != "name" ]
参数:-z 或者 -n
-z
PS:如果结果为零则为真
-n
PS:如果结果不为零则为真
使用场景
[root@web02 scripts]# cat user.sh 
#! /sbin/bash
read -p "请输入名字" name
[ -z $name ] && echo "请输入名字否则无法执行" && exit
read -p "请输入年龄" age
[ -z $age ] && echo "请输入年龄否则无法执行" && exit
echo $name $age

4.正则对比
格式:[[]]
参数:= != < <= > >=
使用场景
[root@web02 scripts]# [[ $USER =~ ^r ]]
[root@web02 scripts]# echo $?
0
PS:~ 为匹配符号
[root@web02 scripts]# [[ $USER =~ t$ ]]
[root@web02 scripts]# echo $?
0
[root@web02 scripts]# [[ !$USER =~ ^r ]]
[root@web02 scripts]# echo $?
1

判断传参的参数是否为整数
[root@web02 scripts]# age=3159713896
[root@web02 scripts]# [[ $age =~ ^[0-9]+$ ]]
[root@web02 scripts]# echo $?
0

5.多整数对比
参数:-a and -o or
-a 并且
-o 或者
使用场景
[root@web02 scripts]# [ 10 -eq 10 -a 10 -ne 10 ]
[root@web02 scripts]# echo $?
1
[root@web02 scripts]# [ 10 -eq 10 -o 10 -ne 10 ]
[root@web02 scripts]# echo $?
0

您可能也喜欢:

Shell脚本入门02

1.数值的运算 expr   整数运算 可运算加减乘除 不支持小数 也可以所见即所得 例如: [root@web02 ~]# expr lisong lisong 运算两边加空格 乘法需转义 例如: [root@web02 ~]# expr 1 + 1 2 [root@web02 ~]# ...

more

Shell脚本入门01

1.Shell脚本三种执行方式 1.bash执行 bash test.sh 2.全路径执行 /server/scripts/test.sh 3. . 或者source执行 . test.sh source test.sh 他们的区别在与第一种和第二种都是在Shel中执行 第三种是在父进程下...

more

Shell脚本简介

1.学习Shell脚本需要用到什么知识?远程连接工具  如:Xshell  CRTLinux常用命令  需熟练掌握三剑客命令  需熟练掌握vim编辑器  需熟练掌握 2.如何学好Shell编程环境变量  条形表达式  if...

more

评论&留言
欢迎新朋友你的到来!
还没有人抢沙发呢~
昵称
邮箱
网站

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

切换登录

注册