1.常见符号
示例:
#!/bin/bash
for var in $*
do
echo "$var" #for循环打印所有参数
done
2.命令分隔符分号";"
示例:
if [ "$filename" == "$1" ]; then #执行两条命令
echo "File $filename exists.";fi
3.双分号;;
shell的case语法如下所示:
case "变量" in
"变量1")
...
;; #这里的双分号类似于break
"变量2")
...
;;
*) #匹配剩下的变量n
...
;;
esac #case结束语句
示例:
#!/bin/base
variable=xyz
case "$variable" in
abc) echo "\$variable = abc" ;;
xyz) echo "\$variable = xyz" ;;
esac
打印:
4. '单引号和"双引号
示例:
#!/bin/bash
a="this is a"
b="this is b"
echo '${a}'
echo "${b}"
打印:
${a}
this is b
5.`反引号和$()
示例:
echo $(date "+ %Y/%m/%d %H:%M:%S") #运行date命令
echo `date "+ %Y/%m/%d %H:%M:%S"` #运行date命令
c=$(echo hello) #打印: c=hello
6.${}和$
比如:
A=123
echo $AB #错误,将打印空的一行,因为运行时默认会去找变量值AB的解释
echo ${A}B #正常打印:123B
7.冒号: 空命令,一个什么都不干的命令,该命令的返回值为0(true). 示例如下:
:
echo $? # 打印上个命令的返回值,为0
由于冒号的返回值为0,所以可以通过>将一个文件清空,但是不会修改该文件权限
示例如下:
: > data.xxx #如果该文件不存在,则会创建, 与cat /dev/null >data.xxx的作用相同
8.()小括号
8.1当用作命令组时 ()会启动一个子shell顺序运行,需要注意的是, 由于()里的变量位于子shell中,并不是当前shell中,所以退出()后,变量还是不会变的 示例:
a=1
(a=2; echo "a = $a") #打印a=2
echo "a = $a" #打印a=1,说明变量a并没有改变
8.2当用作初始化数组时 示例-遍历数组:
arr=(1 2 3) #等价于array[0]=1 array[1]=2 array[2]=3
for(( i=0;i<${#arr[@]};i++))
do
echo ${arr[i]};
done;
8.3当用作命令替换时 示例:
echo $(date "+ %Y/%m/%d %H:%M:%S") #运行date命令
9.(())双括号
9.1用于for循环时 示例:
for(( i=0;i<5;i++));do
echo $i;done
9.2转换运算进制时,可以通过(())将任意数据转为10进制 示例:
echo $((16#ff)) #打印255
9.3 用于整数判断时 示例:
if (("$a" < "$b"))
if (("$a" <= "$b"))
if (("$a" > "$b"))
if (("$a" >= "$b"))
10.{}大括号 10.1当用做代码块时 像一个匿名函数,但是{}里的变量对其它代码来说是可见的, 并且不会开启新的子shell 示例1:
a=1
{
a=2
echo "a = $a" #打印a=2
}
echo "a = $a" #打印a=2,说明已被修改
示例2-写入文件:
#!/bin/bash
{
echo 'hello'
echo 'this is test file'
echo 'end'
} > ./test
效果:
10.2当用做遍历时 示例:
echo {1..10} #打印1 2 3 4 5 6 7 8 9 10
for var in {a..z}
do
echo $var #打印a~z字母
done
10.3也可以用作字符变量截取替换时 未完待续,在下一章将学习.
11.[ ]和[[]]之间的条件测试区别 11.1 [ ]的参数有以下几种
11.2当用作文件判断时,有以下几种参数:
示例-检查当前目录的test文件是否存在:
#!/bin/bash
testfile="${PWD}/test"
if [ -e "$testfile" ];then
echo " $testfile is exist"
fi
11.3 在比较整数时,都使用-eq -ne –gt –ge –lt -le等 示例:
//-eq 判断等于(equal)
if [ "$a" -eq "$b" ]
//-ne 判断不等于(no equal)
if [ "$a" -ne "$b" ]
//-gt 大于(greater than)
if [ "$a" -gt "$b" ]
//-ge 大于等于
if [ "$a" -ge "$b" ]
//-lt 小于(less than)
if [ "$a" -lt "$b" ]
//-le 小于等于
if [ "$a" -le "$b" ]
11.4比较字符串时,只能使用!=和=,如果使用大于小于时,则需要加 \ 转义 示例:
a="abcde"
b="abc"
if [ -n "$a" -o "$a" \> "$b" ] #判断a非0,且a>b
then
echo "a > b"
fi
11.5而[[]]也能适用于整数和字符串,而且对于整数或者字符串而言,它们都可以支持&&、||、<和>、!=、== 示例:
a=11
b=11
c="abc"
e="abcd"
if [[ "$a" == "$b" && "$c" < "$e" ]]
then
echo "a = b,c < e"
fi
12.~波浪号
示例:
A=~
B=~+
echo $A #打印home目录
echo $B #打印当前目录
13.延时
示例:
sleep 1 #延时1秒
sleep 0.5 #延时0.5秒
sleep 1m #睡眠1分
sleep 1h #睡眠1小时
14.变量赋值时的注意
示例:
a= 1 2 3 #将会出错,正确的用法应该是a="1 2 3"