test:可以用中括号替代,中括号前后要有空格
[ " " ] && echo true:
里面有数值就不算空 没有赋值也算空
判断文件的各种属性:
-a FILE 判断文件是否存在
-b 块文件
-c 字符文件
-d 文件夹
-f 普通文件
-g sgid文件
-w 可写
-x 可执行
判断某个文件存不存在,存在就不创建了
FILE=/data/test.txt ; [ -e "$FILE" ] || touch $FILE
[ -e "$FILE" ] 双引号的存在有没有什么影响:
如果[ -e $FILEE ] 相当于 [ -e ],变成判断字符串的数值,所以是成立
[ $x -gt 10 ] 两个变量比较
-bash: [: -gt: unary operator expected
无法确保$x是否为空:
[ "$x" -gt 10 ]:
加上双引号,显示输入数字比较
如何确保判断是数字:
[[ ]]:里面支持正则表达式,需要在里面添加 =~ 包含
[root@Centos7 ~]# str=good; [[ $str =~ oo ]] && echo true
true
[root@Centos7 ~]# str=gooood; [[ $str =~ o{2,} ]] && echo true
true
如何判断数字:
n=a123b; [[ "$n" =~ ^[[:digit:]]+$ ]] && echo digit
判断出数字的情况下参与运算
[[]]:用于正则表达式匹配的情况下,[]:文件的比较,数字比较。
判断一个文件的文件名是否sh后缀:
FILE=f.sh; [[ $FILE =~ \.sh$ ]] && echo.sh
[root@Centos7 ~]# ifconfig |grep -Eo "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
判断是不是合法ip:[root@Centos7 ~]# ip=122.2.3.4; [[ $ip =~ ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] && echo legal ip || echo not legal ip
legal ip
判断:
判断一个文件是不是sh后缀,是不是可执行文件,如果是就执行,不是的话就不执行它
file=/data/test.sh; [[ $file =~ \.sh$ ]] && [ -x "$file" ] && $file
某个文件是否可读并且也可写:
[ -r "$file" -a -w "$file" ] && echo $file is readable and writable
/data/test.sh is readable and writable
即使root在内如果没有执行权限的话,也是执行不起来的
13 [ $# -eq 0 ] && { echo "Usage: `basename $0` USERNAME" ; exit 10; }
14 id $1 &> /dev/null && { echo "User $1 is exist"; exit 20; }
15 useradd $1 &> /dev/null && { echo $1 is created :echo magedu |passwd --stdin $1 &> /dev/null ; } || { ech o "Error!" exit 30; }
创建账号
chmod 给文件加执行权限,如果说chmod的执行权限被取消呢
setfacl -m u:root:rwx /usr/bin/chmod
重新给chmod增加权限