变量
- 变量定义和赋值,变量名和赋值符号和值之间不能有空格
- 变量名规则和c语言要求一致
- 使用已定义的变量用
$
引用,如$FUCK
或${FUCK}
,花括号只起边界作用 - 可以使用
readonly xxxx
,将xxxx
设置为只读变量,只读变量不允许修改和删除 unset
可以删除变量- 字符串
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
- 双引号里可以有变量
- 双引号里可以出现转义字符
- 字符串可以直接拼接
"ahh"${agg}"ahhhh"
- 子串
${string:1:2}
- 串长
1
2
3
4
5
6- 数组
- 只支持一维数组
- 定义`a=(var1 var2 var3)`
- `a[n]=111`
- 读取数组`$(a[n])`,使用`@`可以获取数组全部元素
- 数组长度```${#a[*]}
传参
$0
: 可执行文件文件名$#
: 传递参数数量$*
: 传递的所有参数$$
: 当前运行脚本的PID$@
: 和$*
一样$-
: 显示Shell使用的当前选项$?
: 最后命令的退出状态。0表示没有错误,其他任何值表明有错误
中括号
- 算术比较, 比如一个变量是否为0,
[ $var -eq 0 ]
-eq
相等-ne
不等-gt
大于-lt
小于-ge
大于或等于-le
小于或等于
- 文件属性测试,比如一个文件是否存在,
[ -e $var ]
-b
是否块设备文件-c
是否字符设备文件-d
是否目录-e
文件是否存在-f
正常文件路径或文件名-x
可执行文件-L
是否符号连接-r
是否可读-w
是否可写
- 字符串比较
- 两个字符串是否相同
[[ $var1 = $var2 ]]
,test $var1 = $var2
- 两个字符串是否不同
[[ $var1 != $var2 ]]
- 是否空串
[[ -z $str1 ]]
- 是否非空串
[[ -n $str1 ]]
- 两个字符串是否相同
运算符
- 布尔运算
!
非-o
,||
或-a
,&&
与
printf
printf format-string [arguments...]
- 格式化方式和c语言的printf一致
控制
if
1 | a=10 |
for
1 | for var in item1 item2 ... itemN |
while
1 | while condition |
case
1 | case 值 in |
函数
参数获取方式和cmd的参数获取一致
1 | [ function ] funname [()] |
输入输出重定向
- command > file 将输出重定向到 file
- command < file 将输入重定向到 file
- 文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)