1. $变量
变量不需先声明,使用$引用变量的值
x=12 ##等号左右不能有空格
echo $x
一些重要变量
$HOME 当前用户主目录
$PATH 搜索目录
$PS1 命令提示符
$PS2 二级提示符
$IFS shell输入分隔符,通常为空格、制表符和换行符
$# 参数个数
$0 shell脚本名字
$1,$2... 第1,2个参数
$* 所有参数,用IFS中的第一个字符分隔
$@ 类似$*,但不使用IFS字符分隔
$? 前条命令的退出状态0(true) 1(false)
2. 单引号 ( '' )
当shell碰到第一个单引号时,它忽略掉其后直到右引号的所有特殊字符
3. 双引号 ( " " )
双引号作用与单引号类似,区别在于它没有那么严格。单引号告诉shell忽略所有特殊字符,
而双引号中的三种特殊字符不被忽略:$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串。
4. 反引号(``)或$()
命令替换,$()格式受到POSIX标准支持,$(command),执行命令并捕获其输出,可以放到变量中如下面的expr例子
5. (( )) 或let
算术赋值,用来给表达式赋值并返回一个状态码。利用算术赋值可以进行赋值运算及逻辑比较
((x=x+1)) ## x=$((x+1))
if ((30 < age && age < 60)); then
6. $(( ))
算术扩展,用于显示表达式的值或者把值赋给一个变量,可替代expr命令,比expr更高效.
x=$(($x+1)) ##$(( ))中单个变量引用$符可选,即可写成 x=$((x+1))
x=$(expr $x + 1) ##加号左右要有空格 expr $x + 1 执行结果捕获其输出放到变量
7. [ ] 或test
if [ -f fred.c ] ##要有空格
if [ 30 -lt $age -a $age -lt 60 ]; then
8. [[ ]]
作用与[ ]类似,操作符不同,与C语言操作一致
if [[ 30 < $age && $age < 60 ]]; then ##要有空格,变量前要有$
9. && || 及!
statement1 && statement2 && statement3,上一条命令返回true才执行下一条;||类似
if [ -f fred.c ] && echo 'exists' && [ -f fred.h ] ## echo 返回的是true
10. ( ) 子shell
11. : 空命令,返回true
12. << Here文档
bash中命令行扩展顺序
(1)花括号扩展 rm {main,temp,test}.c
(2)代字符扩展 echo ~
(3)参数扩展和变量扩展 $a
(4)算术扩展 x=$(($x+1))
(5)命令替换 $(command)
(6)分词 IFS
(7)路径名
(8)处理替换