shell编程(二)
1)、使用set设置位置参数(同命令行脚本的传参)# set -- "I am" smart boy.
# echo $#
3
# echo $1
I am
# echo $2
smart
# echo $3
boy.
2)、测试$*和$@,没有带双引号
# echo $*
I am smart boy.
# echo $@
I am smart boy.
使用for循环输出所有参数:
# for i in $*;do echo $i;done
I
am
smart
boy.
# for i in $@;do echo $i;done
I
am
smart
boy.
3)、测试"$*" 和 "$@" ,注意使用了双引号
# echo "$*"
I am smart boy.
# echo "$@"
I am smart boy.
使用for输出所有参数:
# for i in "$*";do echo $i;done
I am smart boy.
# for i in "$@";do echo $i;done
I am
smart
boy.
小结:
回顾开头我们写的概念分析:
$*和$@不加引号,输出所有参数,在for语句中,如果有空格分隔的字符串,会拆分输出
$*和$@都加上引号,例"$*" "$@",此时区别:
$* 会将所有参数,作为完整的字符串输出,如上所示
$@ 会将所有参数,作为独立的单个字符输出,如果有空格分隔的字符串,不会拆分输出,作为独立的单个字符输出.
注释:
set 和eval命令的使用详解:
set可以同命令行一样,可以传参
eval命令:首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为复杂变量
例如:
# A="cat t1.sh"
# echo $A
cat t1.sh
# eval $A#>==此时eval命令对变量进行置换,还执行了其中的命令
I am smart boy.
set与eval的使用,在编写脚本会用到的例子:
例1)、
# Number=$(set -- $(cat t4.sh); eval "echo \$$#")
注释:set 设置传入的参数, eval进行两次扫描,$#:输出所有的位置参数总数,
$$#:将总数,也就是最后一个位置参数的值,赋值给Number
# echo $Number
5
例2)、
# runlevel
N 5
# Runlevel=$(set -- $(runlevel);eval "echo \$$#")
# echo $Runlevel
5
页:
[1]