-eq:是否等于;
-ne:是否不等于;
-gt:是否大于;
-ge:是否大于等于;
-lt:是否小于;
-le:是否小于等于;
[root@xuegod120 ~]# [ 2 -eq 3 ]
[root@xuegod120 ~]# echo $?
1
[root@xuegod120 ~]# [ 2 -ne 3 ]
[root@xuegod120 ~]# echo $?
0
[root@xuegod120 ~]# [ 2 -gt 3 ]
[root@xuegod120 ~]# echo $?
1
[root@xuegod120 ~]# [ 2 -ge 3 ]
[root@xuegod120 ~]# echo $?
1
[root@xuegod120 ~]# [ 2 -lt 3 ]
[root@xuegod120 ~]# echo $?
0
[root@xuegod120 ~]# [ 2 -le 3 ]
[root@xuegod120 ~]# echo $?
0
==:是否等于;
>:是否大于;
<:是否小于;
!=:不等于;
=~:左侧字符串是否能够被右侧的PATTERN匹配;
-z "STRING":判定指定的字符串是否为空,空则为真,不空则为假;
-n "STRING":判定指定的字符串是否不空,不空则为真,空则为假;
注意:字符串测试需要加引号;
需要使用双中括号;
[root@xuegod120 ~]# [[ "name" = "name" ]]
[root@xuegod120 ~]# echo $?
0
[root@xuegod120 ~]# [[ "name" = "$name" ]]
[root@xuegod120 ~]# echo $?
1
[root@xuegod120 ~]# [[ "a" > "b" ]]
[root@xuegod120 ~]# echo $?
1
[root@xuegod120 ~]# [[ "a" < "b" ]]
[root@xuegod120 ~]# echo $?
0
[root@xuegod120 ~]# [[ "a" != "b" ]]
[root@xuegod120 ~]# echo $?
0
[root@xuegod120 ~]# [[ "abc" =~ "o" ]]
[root@xuegod120 ~]# echo $?
1
[root@xuegod120 ~]# [[ "abc" =~ "a" ]]
[root@xuegod120 ~]# echo $?
0
[root@xuegod120 ~]# [[ -z "123" ]]
[root@xuegod120 ~]# echo $?
1
[root@xuegod120 ~]# [[ -z "" ]]
[root@xuegod120 ~]# echo $?
0
[root@xuegod120 ~]# [[ -n "123" ]]
[root@xuegod120 ~]# echo $?
0
[root@xuegod120 ~]# [[ -n "" ]]
[root@xuegod120 ~]# echo $?
1
-a FILE 判断文件是否存在,存在为真,否则为假;
-e FILE 判断文件是否存在,存在为真,否则为假;
-b FILE:是否存在并且为块设备文件;
-c FILE:是否存在并且为字符串文件;
-d FILE:是否存在并且为目录文件;
-f FILE:是否存在并且为普通文件;
-h FILE或-L FILE:是否存在并且为符号链接文件;
-p FILE:是否存在并且为管道文件;
-S FILE:是否存在并且为套接字文件;
-r FILE:是否存在并且对当前用户可读;
-w FILE:是否存在并且对当前用户可写;
-x FILE:是否存在并且对当前用户可执行;
-u FILE:是否存在并且拥有suid权限;
-g FILE:是否存在并且拥有sgid权限;
-k FILE:是否存在并且对当前用户可执行;
-s FILE:是否有内容
-N FILE:文件自从上一次读取后是否被修改;
-O FILE:当前用户是否为文件的属主;
-G FILE:当前用户是否属于文件的属组;
FILE1 -ef FILE2:FILE1与FILE2是否指向同一个文件的Inode号;
FILE1-nt FILE2:FILE1修改时间是否大于FILE2;
FILE1 -ot FILE2:FILE1修改时间是否小于FILE2;
方式一:
COMMAND1 && COMMAND2
COMMAND1 || COMMAND2
! COMMAND
[ -O FILE ] && [ -a FILE ]
方式二:
EXPRESSION1 -a EXPRESSION2
EXPRESSION1 -o EXPRESSION2
! EXPRESSION
[ -O FILE -a -x FILE ] #FILE是否为文件属主并且有执行权限
将当前主机名称保存至hostName变量中;主机名如果为空,或者为localhost.localhost,则将其设置为zx.com
[root@cvm-10_4_2_54 ~]# [ -z "$hostname" -o "$hostname"=="localhost.localdomain" -o "$hostname"=="localhost" ] && hostnamectl zx.com
$1,$2, 2... 2... 2...{10},${11}… #位置参数变量
shift [n] #位置参数左移,默认每次传递后向左移动一位,[n] 可以自定义左移的位数
[root@cvm-10_4_2_54 scripts]# cat file1.sh
#!/bin/bash
#
echo "The first parameter is $1: "
echo "The second parameter is $2: "
[root@cvm-10_4_2_54 scripts]# sh file1.sh 1 2
The first parameter is 1:
The second parameter is 2:
[root@cvm-10_4_2_54 scripts]# cat file2.sh
#!/bin/bash
#
echo $1
shift
echo $1
[root@cvm-10_4_2_54 scripts]# sh file2.sh 1 2
1
2
$0:脚本文件路径本身
$#:脚本传参的个数
$*:所有参数
$@:所有参数
[root@cvm-10_4_2_54 scripts]# cat file3.sh
#!/bin/bash
#
echo $0
echo $#
echo $*
echo $@
[root@cvm-10_4_2_54 scripts]# sh file3.sh 1 2 3
file3.sh
3
1 2 3
1 2 3
语法:
if 测试条件
then
代码分支
fi
或者
if 测试条件; then
代码分支
fi
[root@cvm-10_4_2_54 scripts]# cat file4.sh
#!/bin/bash
#
if [ $1 > $2 ]; then
echo max is $1
fi
if [ $1 < $2 ]
then
echo max is $2
fi
[root@cvm-10_4_2_54 scripts]# sh file4.sh 4 5
max is 4
max is 5
语法:
if 测试条件; then
条件为真执行分支
else
条件为假执行分支
fi
[root@cvm-10_4_2_54 scripts]# cat file5.sh
#!/bin/bash
#
if [ $1 > $2 ]; then
echo max is $1
else
echo min is $2
fi
[root@cvm-10_4_2_54 scripts]# sh file5.sh 6 8
max is 6
练习1:通过命令行参数给定两个数字,输出其中较大的数值;
[root@cvm-10_4_2_54 scripts]# cat file5.sh
#!/bin/bash
#
if [ $1 > $2 ]; then
echo max is $1
else
echo min is $2
fi
[root@cvm-10_4_2_54 scripts]# sh file5.sh 6 8
max is 6
练习2:通过命令行参数给定一个用户名,判断其ID号是偶数还是奇数;
[root@cvm-10_4_2_54 scripts]# cat file6.sh
#!/bin/bash
#
id_num=`id -u $1`
Num=$[ $id_num % 2 ]
if [ $Num -eq 0 ]; then
echo "Even Number"
else
echo "Odd Number"
fi
[root@cvm-10_4_2_54 scripts]# sh file6.sh root
Even Number
[root@cvm-10_4_2_54 scripts]# sh file6.sh abrt
Odd Number
练习3:通过命令行参数给定两个文件名,返回每个文件的行数,并说明其中行数较多的文件;
[root@cvm-10_4_2_54 scripts]# cat file7.sh
#!/bin/bash
#
id1=`cat $1 | wc -l`
id2=`cat $2 | wc -l`
echo "$1 行数是:$id1"
echo "$2 行数是:$id2"
if [ id1 > id2 ];then
echo "$1为行数较多的文件"
else
echo "$2为行数较多的文件"
fi
[root@cvm-10_4_2_54 scripts]# sh file7.sh /etc/passwd /etc/ssh/sshd_config
/etc/passwd 行数是:26
/etc/ssh/sshd_config 行数是:139
/etc/passwd为行数较多的文件