Shell自学二(参数传递和数组)
8.传递参数
1.使用$n来传递参数($0表示文件名)
例子:
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$3";
./test.sh 1 2
输出结果为:
执行的文件名:test.sh
第一个参数为:1
第二个参数为:2
2.特殊字符处理参数(这里面个别没有测试)
$# : 传递到脚本的参数的个数
$* : 以一个单字符串显示所有向脚本传递的参数("$*"以"$1 $2 ... $n")
$$ : 脚本运行的当前进程的ID号
$! : 后台运行的最后一个进程的ID号
$@ : 与$*相同,但是使用的时候加引号("$@"以"$1" "$2" ... "$n")
$- : 显示Shell使用的当前选项,与set命令功能相同
$? : 显示最后命令的退出状态.0表示没有错误,其他任何值表名有错误
3.例子:
echo "Shell 传递参数实例!";
echo "第一个参数为: $1";
echo "参数的个数为: $#";
echo "传递的参数作为一个字符串显示: $*";
./test.sh 1 2 3
输出结果为:
shell 传递参数实例!
第一个参数: 1
参数个个数为: 3
传递的参数作为一个字符串显示: 1 2 3
4.$*与$@区别:
相同点:都是引用所有参数
不同点:只有在双引号中体现出来.假设在脚本运行时写了三个参数1 2 3 ,则"*"等价与"1 2 3",而"#"等价于"1" "2" "3"
5.实例:
for i in "$*"; do
echo $i
done
for i in "$@"; do
echo $i
done
./test.sh 1 2 3
执行结果:
1 2 3
1
2
3
可以看出@使用for是自带换行
9.数组(Bash Shell只支持一维数组,数组元素的下标由0开始,Shell数组用括号表示,元素用空格分开)
1.语法格式:
array_name=(value1 ... valuen)
例:my-array=(A B "C" D)
2.定义数组
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
3.读取数组
${array_name[index]}
4.获取数组中的全部元素
${array_name[*]}
${array_name[@]}
5.获取数组的长度
${#array_name[*]}
${#array_name[@]}
做的实例1:
#!/bin/bash
#使用$*输出
echo "使用星号输出:"
for i in "$*"; do
echo $i
done
#使用$@输出
echo "使用第二种方法进行输出:"
for j in "$@"; do
echo $j
done
做的实例2:
#!/bin/bash
#Shell参数传递
echo "----测试参数传递的例子:-----";
echo "执行的文件名为 : $0";
echo "第一个参数为 : $1";
echo "第二个参数为 : $2";
#特殊字符处理参数,$*与$@的不同
echo "----测试特殊字符处理参数:----";
echo "参数的个数为 : $#";
echo "字符串的形式显示 : $*";
echo "字符串的形式显示2 : $@";
#数组的内容
echo "----测试数组的基本使用----"
my_arr=(A B "C" D);
my_arr2[0]=$1;
my_arr2[1]=$2;
my_arr2[2]=$3;
echo "读取数组:${my_arr[3]}";
echo "数组中的全部元素:${my_arr[*]}";
echo "数组中的全部元素2:${my_arr[@]}";
echo "数组my_arr的数组长度为:${#my_arr[*]}";
echo "数组my_arr2的数组长度为:${#my_arr2[@]}";
echo "数组my_arr2的全部元素为:${my_arr2[*]}";