#!bin/bash
检测脚本是否有语法问题:bash -n
ID1 AND ID2计算/etc/passwd文件第15个和18个的用户ID之和
ID1=$(head -15 /etc/passwd |tail -1 |cut -d: -f3)
ID2=$(head -13 /etc/passwd |tail -1 |cut -d: -f3)


go to sum ID num


ID_SUM=$[$ID1+$ID2]



echo "the ID1 is : $ID1"
echo "the ID2 is : $ID2"
echo "the ID sum is : $ID_SUM"
lianxi计算3个用户的ID之和
ID1=$(id -u EZ)
ID2=$(id -u linux)
ID3=$(id -u zhang)
go to sum ID num


ID_SUM=$[$ID1+$ID2+$ID3]


echo "the ID1 is : $ID1"
echo "the ID2 is : $ID2"
echo "the ID1 is : $ID1"
echo "the ID sum is : $ID_SUM"
lianxi2计算/etc/XXXXXXXX和/etc/XXXXX文件的空白行数之和
ID1=$(grep "^[[:space:]]*$" /etc/rc.d/init.d/functions |wc -l)
ID2=$(grep "^[[:space:]]*$" /etc/rc.d/init.d/network |wc -l)
go to sum ID num
ID_SUM=$[$ID1+$ID2]
echo "the ID1 is : $ID1"
echo "the ID2 is : $ID2"
echo "the ID sum is : $ID_SUM"
条件测试
成功:0失败:1-255
数值测试 数值之间的比较
-eq 是否等于
A=1
B=1
第一种写法[  $A -eq $B  ]记得第一个括号之后跟两个空格
echo $?
0
B=3
[ $A -eq $b]
echo $?
1-255
-ne 是否不等于
-gt 是否大于
-ge 大于等于
-lt 小于
-le 是否小于等于
第二种写法: test 2 -eq 3
echo $?
1-255
第三种写法 `EXPRESSION`一般用于字符表示时
练习:判断centos用户ID是否比Ubuntu用户ID大?
ID1=$(id -u centos)
ID2=$(id -u ubuntu)
[  $ID1 -gt $ID2  ] && echo "centos ID 大" || echo "ubuntu ID 大"
字符串测试
== 是否等于
列如[  ubuntu == ubuntu  ]
echo $?
0
列U=ubuntu
[  ubuntu == $U  ]
echo $?
0
注意在字符比较的时候尽量使用""为了避免语法出错
例如[  ubuntu == "$?"  ]
 > 是否大于
 < 是否小于
 != 是否不等于
 =~ 左侧字符串是否能够被右侧的PATTERN所匹配
name=ubuntu
 [[ "$name" =~ buntu ]]
 echo $?
 0
[[ "$name" =~ buntuu ]]
echo $?
1-255
练习:判断主机名是否包含linux,如果不包含的话,则修改为linux
调取主机名:hostname
HN=$(hostname)
注意应为hostname 是个命令,所以需要用$()起来
[[ "$HN" =~ linux ]]
echo $?
0
最终答案:
 [[ "$HN" =~ magedu ]] || hostname magedu
-z 判断字符串是否为空,为真
-n 判断字符串是否不为空
练习:主机名如果为空,或者为localhost.locadomain 或者包含localhost 或者包含Linux 则
通通将其设为www.magedu.com
hn=$(hostname)
[  -z "$hn" -o "$hn"=="localhost.locadomain" -o "$hn"=~"localhost" -o "$hn"=~"linux"  ] && hostname www.magedu.com
 文件测试
 存在性测试
 -a file
 -e file 文件的存在性测试,如果存在,则为真。
[  -e /etc/passwd ]
 echo $?
 0
文件的测试类型
-b file 是否为块设备
-c file 是否为字符设备
-d file 是否为目录
-f file 是否为普通文件
-h 或者-L是否为符号链接
-p file 是否为管道设备
-S file 是否为套接字文件
[  -c /dev/null ] && echo "null 是字符设备"
文件权限测设
-r 对当前用户是否可读
-w 对当前用户是否可写
-x 对当前用户是否可执行
[  -r /etc/passwd ] && echo "passwd 当前用户可读"
文件,是否有内容
-s file 是否有内容
时间戳
-N file 文件自从上次操作之后,是否被改过
从属关系测试
-O file 当前用户是否为文件的属主
-G file 当前用户是否为文件的属组
双目测试
FILE1 -ef FILE2 是否指向同一个文件系统的相同inode的硬连接
FILE1 -nt FILE2 FILE1文件,是否新于FILE2
FILE1 -ot FILE2 FILE1文件,是否旧与FILE2
查看一个文件是否有内容
test -s linux.com
echo $?
2
但给linux.com文件添加内容后echo "test" > linux.com
echo $?
0
文件自上次访问后是否被改过
test -N magedu.com
echo $?
组合测试条件:
逻辑运算
第一种方式:
command1 && command2 表示并且的关系
command1 || command2 表示或的关系
! command 表示取反
第二种方式
expression -a expression 表示并且的关系
expression -o expression 表示或的关系
-not !expression 表示取反
[  -o file -a -x file ] 当前用户是否为file文件的属主,并且是否有执行权限
exit [n] n表示自己可以指定一个状态码
注意; shell脚本中,一旦遇到exit时,即将会退出
练习:一行命令实现,linux用户是否存在,不存在,则添加,如果存在,以状态码为5的方式退出。
id linux &> /dev/null && exit 5 || useradd linux