1. $n:代表列,n为数字
$0代表该脚本名称,$1-$9代表输入的第1-9个参数,10以上的参数需要用大括号,${11}
2. $#:获取所有输入参数的个数,在循环中比较常用
3. $*和$@
两个都是代表命令行中的所有参数,
只有在被双引号“ ”包含时,才会有区别,$*把所有参数作为一个整体,$@把每个参数分别作为一个独立个体
写一个for循环的脚本如下:
[kevin@hadoop100 datas]$ cat eg.sh
#! /bin/bash
# 没有加双引号
for i in $*
do
echo "*1 is $i"
done
echo"......................."
for j in $@
do
echo "@1 is $j"
done
echo"......................."
# 加双引号
for n in "$*"
do
echo "*2 is $n"
done
echo"......................."
for m in "$@"
do
echo "@2 is $m"
done
执行脚本
[kevin@hadoop100 datas]$ chmod 777 eg.sh
[kevin@hadoop100 datas]$ ./eg.sh A B C
*1 is A
*1 is B
*1 is C
./eg.sh: line 8: echo.......................: command not found
@1 is A
@1 is B
@1 is C
./eg.sh: line 15: echo.......................: command not found
*2 is A B C
./eg.sh: line 22: echo.......................: command not found
@2 is A
@2 is B
@2 is C
可以看出当$*和$@没加双引号时,都表示所有命令行参数;
当加了双引号后,$*把所有命令行参数作为一个整体,以“$1 $2 $3...”的形式输出所有参数;
$@中的每个参数都看成是独立的,所以“$@”中有3个参数,就会循环打印3次;以“$1” “$2” “$3”...的形式输出所有参数。
4. $?
变量值为0,证明上一个命令执行正确,非0证明上一个命令执行不正确
5. $变量(字母)
引用自定义字母变量
ps:自定义变量中有空格需要用单引号或者双引号括起来
6. $[运算式]
[kevin@hadoop100 datas]$ S=$[(4+5)*10]
[kevin@hadoop100 datas]$ echo $S
90