变量的定义:
- a=1
- b=hello
- c="hello world !"
- d='hello "反启" !'
- e=`ls` (注意:这是反引号)
备注:=号左右不能有空格;如果内容有空格需要使用单引号或者双引号;双引号支持转译 $开头的变量会被自动替换
变量的使用:
echo $a
echo ${a}
echo "$a"
备注:使用$var 或 ${var}来访问变量,后者更为严谨,$var_x和${var}_x是不同的;变量不需要定义也可以使用,引用未定义的变量,默认为空值。
预定义变量:
- echo $USER
- echo $PWD
- echo $PATH
- echo $HOME
数组变量:
array=(1 2 3 4 5)
array=(`ls`)
打印数组第一个元素:echo ${array[0]}
打印数组:echo ${array[@]} 或 echo ${array[*]}
打印数组长度:echo ${#array[@]}
备注:使用()来定义数组
特殊符号的使用:
- 双引号用于括起一段字符串值,支持$var形式得变量替换
- 单引号也表示其内容是字符串值,不支持转义
- \反斜杠,某些情况下表示转义
- $(ls) 表示执行ls命令后的结果,与``类似,它还可以嵌套
- $(()) 对变量进行操作。比如变量a、b相加:$((a+b))或$(($a+$b))
- (()) 是整数扩展,把里面的变量当作整数去处理
- ({1..10}) 等价于seq 1 10 ,表示1到10
变量类型:
- 字符串:a="xx"
- 布尔:a=true
- 数字:a=131452
字符串操作:
提取子字符串:${value:offset} ${value:offset:ength}
字符串长度:${#var}
掐去头或尾:
去头:${value#pattern} ${value##pattern}
去尾:${value%pattern} ${value%%pattern}
例如:value="hello from home" -> echo ${value#*o} 或 ${value#hello} 打印"from home"
替换:${value/pattern/string} ${value//pattern//string}
备注:#与## %与%% /与//的区别:最短匹配模式VS最长匹配模式
算术判断:
相等:[ 2 -eq 2 ]
不相等:[ 2 -ne 2 ]
大于:[ 3 -gt 1 ]
大于等于:[ 3 -ge 3 ]
小于:[ 3 -lt 4 ]
小于等于:[ 3 -le 3 ]
逻辑与-a:[ 2 -ge 1 -a 3 -ge 4 ]
逻辑或-o:[ 2 -ge 1 -o 3 -ge 4 ]
注意:中括号与相邻数字的空格
字符串判断:
[ string1 = string2 ] :如果两字符串相同,则结果为真
[ string1 != string2 ] :如果两字符串相同,则结果为真
[ -n string ] :如果字符串不是空,则结果为真
[ -z string ] :如果字符串是空,则结果为真
[[ "xxxx" == x* ]] :*在表达式中表示0或者多个字符
[[ xxx == x? ]] :?在表达式中表示单个字符
内置判断:
[ -e file ] :如果文件存在,则结果为真
[ -d file ] :如果文件是一个子目录,则结果为真
[ -f file ] :如果文件是一个普通文件,则结果为真
[ -r file ] :如果文件可读,则结果为真
[ -s file ] :如果文件的长度不为0,则结果为真
[ -w file ] :如果文件可写,则结果为真
[ -x file ] :如果文件可执行,则结果为真
逻辑判断:
if条件判断:
if [ condition ] ; then ...; fi
if [ condition ] ; then ...;else ...;fi
if [ condition ] ; then ...;elif ...;fi
备注:&& 与 ||;&&之前为执行成功时,才会执行后面的;||之前为执行失败时,才会执行后面的
for条件判断:
for(( c1; c2; c3));
do ...;
done
如:for ((i=0;i<4;i++));do echo $i;done
for x in (1 2 3 4 5);do echo $x;done
while循环:
i=0;
while [ $i -lt 3 ];
do ...;
((i=i+1));
done
退出控制:
return ;
break ;
continue ;