shell实例(十四) ----set,export,getopts命令

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  注:-是不能丢弃的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值