1.使用set命令来改变脚本的位置参数
#! /bin/sh
echo
echo "Positional parameters before set /`uname -a/` :"
echo "Command-line argument #1 = $1"
echo "Command-line argument #2 = $2"
echo "Command-line argument #3 = $3"
set `uname -a`
echo $
echo "Positional parameters after set /`uname -a/` :"
echo "Field #1 of 'uname -a' = $1"
echo "Field #2 of 'uname -a' = $2"
echo "Field #3 of 'uname -a' = $3"
echo "----"
echo $_
echo
2.反转位置参数
#! /bin/sh
set a/ b c d/ e;
OIFS=$IFS; IFS=:;
echo
until [ $# -eq 0 ]
do
echo "### k0 = "$k""
k=$1:$k; ------------------------------将每个位置参数都附件在循环变量的后边
echo "### k="$k""
echo
shift;
done
set $k -------------------设置一个新的位置参数
echo -
echo $#
echo -
echo
for i
do
echo $i
done
IFS=$OIFS
exit 0
3.重新分配参数位置
#! /bin/sh
variable="one two three four five"
set -- $variable
first_param=$1
second_param=$2
shift;shift
remaining_params="$*"
echo
echo "first parameter = $first_param"
echo "second parameter = $second_param"
echo "remaining parameter = $remaining_params"
echo;echo
set -- $variable
first_param=$1
second_param=$2
echo "first_parameter = $first_param"
echo "second_parameter = $second_param"
set --
first_param=$1
second_param=$2
echo "first_parameter = $first_param"
echo "second_parameter = $second_param"
exit 0
unset删除一个shell变量,对位置参数无效
4.使用export命令来将一个变量传递到一个内嵌awk的脚本中
#! /bin/sh
ARGS=2
E_WRONGARGS=65
if [ $# -ne "$ARGS" ]
then
echo "Usage: `basename $0` filename column-number"
exit $E_WRONGARGS
fi
filename=$1
column_number=$2
export column_number
awkscript='{ total += $ENVIRON["column_number"] }
END { print total }'
awk "$awkscript" "$filename"
exit 0
5.用getopts命令来读取传递给脚本的选项或参数
#! /bin/sh
NO_ARGS=0
E_OPTERROR=65
if [ $# -eq "$NO_ARGS" ]
then
echo "Usage: `basename $0` options (-mnopgrs)"
exit $E_OPTERROR
fi
while getopts ":mnopq:rs" Option
do
case $Option in
m) echo "Scenario #1: option -m- [OPTIND=${OPTIND}]";; -----------${OPTIND}隐含变量,递增加1
n|o) echo "Scenario #2: option -$Option- [OPTIND]=${OPTIND}]";;
p) echo "Scenario #3: option -p- [OPTIND]=${OPTIND}]";;
q) echo "Scenario #4: option -q- with argument /"$OPTARG/" [OPTIND=${OPTIND}]";;
r|s) echo "Scenario #5: option -$Option-";;
*) echo "Unimplemented option chosen.";;
esac
done
shift $(($OPTIND - 1))
# (译者注: shift命令是可以带参数的, 参数就是移动的个数)
# 将参数指针减1, 这样它将指向下一个参数.
# $1 现在引用的是命令行上的第一非选项参数,如果有一个这样的参数存在的话.
exit 0
执行过程:./11-20.sh -mnopq s a 注:-是不能丢弃的