Shell 语法
变量
name='John' #or declare name='Docn' 定义局部变量
export NAME='Don' #定义全局变量
echo "$name""$NAME" #双引号内 $ 引用名称对应内容
输入
read commit #从命令行读取一行内容
echo "$commit"
条件测试
test
expr
测试文件状态
syntax
test condition
或 [ condition ]
方括号形式使用需注意括号与条件间需要留有空格
测试参数 | 解释 | 测试参数 | 解释 |
---|---|---|---|
-d | 目录 | -s | 文件长度大于0、非空 |
-f | 正规文件 | -w | 可写 |
-r | 文件可读 | -x | 可执行 |
usage
$ ls -l syntax.md
-rw-r--r-- 1 xugang staff 597 2 13 23:28 syntax.md
$ test -f syntax.md # 也可写成 [ -f syntax.md ]
$ echo $?
0
测试时使用逻辑操作符
-a
逻辑与-o
逻辑或!
逻辑否
usage
$ ll 1.1.sh syntax.md
-rwxr-xr-x 1 xugang staff 239B 2 4 14:58 1.1.sh
-rw-r--r-- 1 xugang staff 818B 2 13 23:33 syntax.md
$ [ -x 1.1.sh -o -x syntax.md ]
$ echo $?
0
字符串测试
syntax
- test "string"
- test string_operator "string"
- test "string" string_operator "string"
- [ string_operator string ]
- [ string string_operator string ]
数值测试
expr用法
数组
索引数组
#数组定义, 元素以空格分隔,注意等号前后不能有空格
array=( one two three )
files=( "/etc/passwd" "/etc/group" "/etc/hosts" )
limits=( 10 20 30 40 )
#打印数组
printf "%s\n" "${array[@]}"
printf "%s\n" "${files[@]}"
printf "%s\n" "${limits[@]}"
#循环遍历数组
for i in "${array[@]}" ; do
echo $i
# do whatever on $i
done
关联数组
// 申明关联数组
declare -A ass_array1
// 数组名[索引] = 变量
ass_array1[index1] = val