赋值语句
var="xxx" #不能有空格
条件判断
&& 逻辑的 AND 的意思
|| 逻辑的 OR 的意思
if [ "$var" = "test" ];then
echo "yes"
fi
-eq 等于 应用于:整型比较
-ne 不等于 应用于:整型比较
-lt 小于 应用于:整型比较
-gt 大于 应用于:整型比较
-le 小于或等于 应用于:整型比较
-ge 大于或等于 应用于:整型比较
字符串
- 字符串长度
${#'abc'} 长度为3
- 字符串打印并补空格
printf '%10s' 'hello'
- 获取文件名
${var##*/}
该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。
使用例子及结果如下:从运行结果可以看到,使用该命令,可以提取出我们需要的文件名file.txt。
- 获取某路径(如当前路径)所在的文件夹
dirname $0 获取当前脚本所在目录
数组
- 字符串以空格分割存入数组
keys="abc ajk sb"
arr=($keys) #arr[0]=abc, arr[1]=ajk, arr[2]=sb
- 数组元素个数
${#arr[@]}
- 数组所有元素的值
${arr[*]} 或 ${arr[@]}
- 遍历数组
A:
num=${#array[@]}
for((i=0;i<num;i++))
{
echo ${array[$i]};
}
B:
for var in ${array[@]}; do
echo $var
done
associate array
- 定义
declare -A ass_arr
ass_arr=(
['key']='value',
["${key2_var}"]="val2"
)
- 引用关联数组元素
echo "value = ${ass_arr[$key]}"
${!ass_arr[@]} 所有key
${ass_arr[@]} 所有value
${ass_arr[$key]} $key所在元素的值
- 遍历关联数组
for key in ${!ass_arr[@]}
do
echo "key = $key; value = ${ass_arr[$key]};"
done
- 关联数组作为bash函数参数
(传参数名进去函数)
33 function sf
34 {
35 name=$1
36 str='${!';
37 str+=${name}
38 str+='[@]}'
39 eval "echo $str"
40 }
41
42 declare -A conf
43 conf[pou]=789
44 conf[mail]="ab\npo"
45 conf[doo]=456
46
47 sf "conf"
- $()与``区别
what-is-the-difference-between-$()-and-``-in-shell-programming
The backticks/gravemarks have been deprecated in favor of $()
for command substitution because $()
can easily nest within itself as in $(echo foo$(echo bar))
. There are also minor differences such as how backslashes are parsed in the backtick/gravemark version.
See the POSIX spec for detailed information on the various differences.