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 $idone#使用$@输出
echo "使用第二种方法进行输出:"for j in "$@"; do echo $jdone做的实例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[*]}";