使用变量时,建议给所有变量 按照${变量名} 的方式使用。
字符串建议使用双引号""包括,
命令的结果保存到变量: 变量=$(命令的结果) 不推荐 `命令的结果`
读取某一文件内容: cat /目录/文件名
只读变量: readonly 变量名="值"
命令行参数: $0 当前脚本的名字 从$1开始 是脚本需要的参数 $? 获取上一个命令执行后的结果
$* 所有参数
转义字符: -e
boolean返回值: 1是false 0是true
命令替换: ` 命令` shell先执行命令,将执行结果暂存,等到合适时间再输出.
#! /bin/bash riqi=`date` echo ${riqi} echo "------------------------" riqi=${date} echo ${riqi} echo "------------------------" echo `date`
root@VM-0-17-ubuntu:/home/bash# ./bash08.sh Thu May 24 16:28:55 CST 2018 ------------------------ ------------------------ Thu May 24 16:28:55 CST 2018
算术运算符: + - * / % == != =
#! /bin/bash a=10 b=20 echo "a+b=: `expr $a + $b`" echo "a-b=: `expr $a - $b`" echo "a*b=: `expr $a \* $b`" echo "a/b=:`expr $a / $b `" echo "a%b=: `expr $a % $b` " [ $a == $b ] echo $? echo "a=b?: [ $a == $b ]" [ $a != $b ] echo $? echo "a=b?: [ $a != $b ]" a=${b} echo ${a}
root@VM-0-17-ubuntu:/home/bash# ./bash04.sh a+b=: 30 a-b=: -10 a*b=: 200 a/b=:0 a%b=: 10 1 a=b?: [ 10 == 20 ] 0 a=b?: [ 10 != 20 ] 20
关系运算符(支持数字或者全为数字的字符串): -eq(相等) -ne(不等) -gt(大于) - lt(小于) -ge(大于等于) -le(小于等于)
a=10 b=20 if [ ${a} -eq ${b} ] then echo "${a}==${b}" else echo "${a} != ${b}" fi if [ ${a} -ne ${b} ] then echo "${a} != ${b}" else echo "${a}==${b}" fi if [ ${a} -gt ${b} ] then a=10 b=20 if [ ${a} -eq ${b} ] then echo "${a}==${b}" else echo "${a} != ${b}" fi if [ ${a} -ne ${b} ] then echo "${a} != ${b}" else echo "${a}==${b}" fi if [ ${a} -gt ${b} ] then echo "${a} > ${b}" else echo "${a} < ${b}" fi if [ ${a} -lt ${b} ] then echo "${a} < ${b}" else echo "${a} > ${b}" fi if [ ${a} -ge ${b} ] then echo "${a} >= ${b}" else echo "${a} < ${b}" fi if [ ${a} -le ${b} ] then echo "${a} <= ${b}" else echo "${a} >= ${b}" fi
root@VM-0-17-ubuntu:/home/bash# ./bash09.sh 10 != 20 10 != 20 10 < 20 10 < 20 10 < 20 10 <= 20
布尔运算符: ! 非运算符 -o 或 -a 且
a=10 b=20 if [ ${a} == ${b} ] then echo "a==b" else echo "a!=b" fi if [ ${a} -lt ${b} -a ${a} -lt 30 ] then echo "a<b and a<30" else echo "exception" fi if [ ${a} -lt ${b} -o ${a} -gt 30 ] then echo "a<b or a>30" else echo "exception" fi
root@VM-0-17-ubuntu:/home/bash# ./bash10.sh a!=b a<b and a<30 a<b or a>30
字符串运算符:
= 字符串是否相等
!= 是否不相等
-z 长度是否为空
-n 长度是否不为空
str 长度是否为空
a="abc" b="bcdfg" echo " [ ${a} = ${b} ] " [ ${a} = ${b} ] echo $? [ -z ${a} ] echo $? [ -n ${a} ] echo $?
root@VM-0-17-ubuntu:/home/bash# ./bash11.sh [ abc = bcdfg ] 1 1 0 ./bash11.sh: line 24: abc: command not found
文件测试运算符:
file="/home/bash/file1.txt" echo "是否可读" [ -r ${file} ] echo $? echo "是否可写" [ -w ${file} ] echo $? echo "是否可执行" [ -x ${file} ] echo $? echo "是否是块设备文件" [ -b ${file} ] echo $? echo "是否是字符设备文件" [ -c ${file} ] echo $? echo "是否是目录" [ -d ${file} ] echo $? echo "是否是普通文件" [ -f ${file} ] echo $? echo "是否设置了SGID位" [ -g ${file} ] echo $? echo "是否设置的黏着位" [ -k ${file} ] echo $? echo "是否具有管道" [ -p ${file} ] echo $? echo "是否设置了SUID位" [ -u ${file} ] echo $? echo "文件是否为空" [ -s ${file} ] echo $? echo "文件是否存在" [ -e ${file} ] echo $?
root@VM-0-17-ubuntu:/home/bash# ./bash12.sh 是否可读 0 是否可写 0 是否可执行 1 是否是块设备文件 1 是否是字符设备文件 1 是否是目录 1 是否是普通文件 0 是否设置了SGID位 1 是否设置的黏着位 1 是否具有管道 1 是否设置了SUID位 1 文件是否为空 0 文件是否存在 0