使用变量时,建议给所有变量 按照${变量名} 的方式使用。
字符串建议使用双引号""包括,
命令的结果保存到变量: 变量=$(命令的结果) 不推荐 `命令的结果`
读取某一文件内容: 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
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