····shell变量
定义变量
variableName="value"
使用变量
echo ${variableName}
只读变量
readonly variableName
删除变量
unset variableName
变量类型
1)局部变量
仅仅当前shell自己使用。
2)环境变量
全部shell都能使用。
3)shell变量
脚本中设置的变量,脚本运行结束就消失。
····shell特殊变量
$0 当前脚本名
$n 传递给脚本或者函数的第n个参数。
$# 传递给脚本或者函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,传给函数的参数作为整体 “aa bb cc dd”。
$? 上个命令的执行状态。
$$ 当前shell的进程id。
····Shell替换
转义字符
echo -e 表示对转义字符进行替换
以下转移命令:
\\ 反斜杠
\a 警报,响铃
\b 退格(删除键)
\f 换页(FF),将当前位置移到下页开头
\n 换行
\r 回车
\t 水平制表符(tab键)
\v 垂直制表符
命令替换
variableName=`command` 使用反引号
shell变量删除
从前匹配删除
path=123456789123456789
echo ${path#1*3} 输出结果 456789123456789
echo ${path#1*3} 输出结果 456789
从后匹配删除
filename=file.bak.bak
echo ${filename%.bak} 输出结果 file.bak
echo ${filename%%.bak} 输出结果 file
shell变量取代
new=abcabcabc
echo ${new/abc/ABC} 输出结果 ABCabcabc
echo ${new//abc/ABC} 输出结果 ABCABCABC
Shell变量替换
var=${str-expr}
str未声明 str为空 str非空
str= str= str=zww
var=expr var= var=zww
var1=${str1:-expr}
str1未声明 str1为空 str1非空
str1= str1= str1=zww
var1=expr var1=expr var1=zww
var2=${str2+expr}
str2未声明 str2为空 str2为空
str2= str2= str2=
var2= var2=expr var2=expr
var3=${str3:+expr}
str3未声明 str3为空 str3非空
str3= str3= str3=zww
var3= var3= var3=expr
var4=${str4=expr}
str4未声明 str4为空 str4非空
str4=expr str4= str4=zww
var4=expr var4= var4=zww
var5=${str5:=expr}
str5未声明 str5为空 str5非空
str5=expr str5=expr str5=zww
var5=expr var5=expr var5=zww
var6=${str6?expr}
str6未声明
./zww.sh: line 75: str6: expr
str6为空
./zww.sh: line 77: str6: expr
str6非空
str6=zww
var6=zww
var7=${str7:?expr}
str7未声明
./zww.sh: line 84: str7: expr
str7为空
./zww.sh: line 87: str7: expr
str7非空
str7=zww
var7=zww
····Shell运算符
数字运算符
expr 4 + 4 加法
expr 4 - 2 减法
expr 4 \* 4 乘法
expr 8 / 2 除法
expr 8 % 2 取余
关系运算符
[ $a == $b ] [ $a -eq $b ] 是否相等
[ $a != $b ] [ $a -ne $b ] 是否不等
[ $a -le $b ] 是否小于
[ $a -lt $b ] 是否小于等于
[ $a -ge $b ] 是否大于
[ $a -gt $b ] 是否大于等于
布尔运算符
[ ! false ] 返回 true。
$a -lt 20 -o $b -gt 100 ] 返回 true。
$a -lt 20 -a $b -gt 100 ] 返回 false。
字符串运算符
[ $a = $b ] 两字符串相同,为真。
[ $a != $b ] 两字符串不同,为真。
[ -z $a ] 字符串为空时,为真。
[ str ] 字符串非空时,为真。
····Shel字符串
单引号 单引号里的任何字符都会原样输出
双引号 双引号里可以有变量
获取字符串长度
echo ${#string}
提取子字符串
echo ${string:1:4}
字符串删除
path=123456789123456789
echo ${path#1*3} 输出结果 456789123456789
echo ${path#1*3} 输出结果 456789
filename=file.bak.bak
echo ${filename%.bak} 输出结果 file.bak
echo ${filename%%.bak} 输出结果 file
字符串取代
new=abcabcabc
echo ${new/abc/ABC} 输出结果 ABCabcabc
echo ${new//abc/ABC} 输出结果 ABCABCABC
····Shell数组
数组的定义
array_name=(value0 value1 value2 value3)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
读取valuen=${array_name[2]}
使用@ 或 * 可以获取数组中的所有元素
${array_name[*]}
${array_name[@]}
获取数组的长度
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}