参考链接:https://blog.csdn.net/hanjinjuan/article/details/119086556
shell 编程—-特殊符号
参数$相关
| $? | 显示最后命令的退出状态,0表示正常运行退出,其他值为运行出错 |
|---|---|
| $0 | 脚本本身名称 |
| $1 | 表示第一个参数 |
| $2 | 表示第二个参数 |
| $# | 表示传递脚本的参数个数 |
| $@ | 表示传递脚本的所有参数 |
| $$ | 脚本运行的当前进城ID号 |
括号
小括号()
- 命令组:括号中的命令新开一个shell 顺序执行命令,括号中的变量不能被剩余脚本使用。括号里命令使用分号
;分割,最后一个命令可以没有分号 - 命令替换:等同于
cmd,并非所有shell通用 -
双小括号
(()) 整数计算:简单的整数运算
- 支持C语言运算规则的运算符,可以进行进制转换 。 需要深入探究
- 重定义变量值:
a=5;((a++))可将a的值重定义6 算术运算比较:双括号中的变量可以不使用
$符号前缀,括号内支持多个表达式用逗号分割fisher@DESKTOP-PDTE12V:~$ echo $((a=8#55; a+100))-bash: a=8#55; a+100: syntax error: invalid arithmetic operator (error token is "; a+100")fisher@DESKTOP-PDTE12V:~$ echo $((a=8#55, a+100))145
中括号
[]双中括号
[[]][[为bash程序语言的关键字,在[[]]所有字符不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换- 支持字符串模式匹配。 需要深入探究
- 使用
[[...]]条件判断结构,能够防止脚本中的许多逻辑错误。 bash将
[[]]的表达式看作一个单独的元素,并返回一个退出状态码大括号
{}大括号扩展。对大括号中的文件名作扩展,大括号中不允许未引用或转义的空白;以逗号分割文件列表进行扩展
touch {a,b}.txt; 以..分割的顺序文件列表扩展touch {a..d}.txt- 代码块。括号内的命令用分号隔开,最后一个命令必须有分号,第一个命令与左括号必须有一个空格。大括号的命令在当前shell执行,相当于匿名函数,脚本变量仍可用。
数组参数相关
数组的定义
Bash Shell 只支持一维数组,初始化无需定义数组大小,下标从0开始
Shell 数组用括号表示,元素用空格分割,语法格式如下:A=(a b cd efg) //数组的定义A="a b cd efg" //字符串的定义
数组的使用
遍历数组(for)
//通过元素遍历for var in ${A[@]}doecho ${var}done//通过下标遍历for ((i=0;i<5;i++))doecho ${A[$i]}donefor i in $(seq 0 4) //for i in {0..4}doecho ${A[$i]}done
其他用法
| ${A[@]} | 返回数组的全部元素 | ${A[*]}同作用 |
|---|---|---|
| ${#A[@]} | 返回数组元素总个数 | ${#A[*]}同作用 |
| ${A[0]} | 返回数组的第一个元素 | |
| ${#A[3]} | 返回数组的第四个元素的长度 |
shell 编程—-变量
命令替换 $() 和反引号 ```` 比较
作用
均表示命令的替换,将一条命令的执行结果赋给一个变量。反引号或$()里的内容先进行执行,然后将执行的结果代换到当前命令中 ,具体过程为:在shell中fork一个子进程区做他们括起来的命令,然后在返回父进程
区别
bash shell 中使用$(),书写格式易区分,字符未有特殊定义
- 反引号
```与单引号‘’`形式相近,不易区分,适用全部unix shell使用。 $()中使用\可特殊字符将转义为普通字符,而```本身就对`进行了转义,保留了其本身意思,需要\\转义- 在多层次的复合替换中,
```必须要额外的转义字符处理`,而$()比较直观。
示例
fisher@DESKTOP-PDTE12V:~$ var=100fisher@DESKTOP-PDTE12V:~$ echo $(echo \$var $var)$var 100fisher@DESKTOP-PDTE12V:~$ echo `echo \$var $var`100 100fisher@DESKTOP-PDTE12V:~$ echo "echo \$var $var"echo $var 100fisher@DESKTOP-PDTE12V:~$ echo "$(echo \$var $var)"$var 100fisher@DESKTOP-PDTE12V:~$ echo "`echo \$var $var`"100 100fisher@DESKTOP-PDTE12V:~$ echo `echo \\$var $var`$var 100
变量替换${}
一般情况下,$var与${var} 均表示变量的替换,区别不大,但${var}有比较精确的界定变量名称的范围
shell编程—-运算符
单引号''和双引号""区别
单引号厉害之处在于:无论单引号内是特殊字符、变量还是命令,一律按照单引号内的格式内容原封不动的输出,适用于不解析变量、命令等的场景
双引号厉害之处在于:先解析双引号内的变量和命令后输出,适用于字符串中附带有变量和命令并且想将其解析后输出的场景。
建议:字符串常量使用单引号括,字符串中含有变量、命令等使用双引号。
等号=和==
shell脚本对空格有严格的规定,赋值语句等号两边不能有空格,而字符串比较,等号两边必须有空格
