linux-shell脚本入参笔记

####前言
linux shell脚本中 获取参数 大致上 有

  • 直接 xxx.sh p1 p2
    直接通过获取 脚本后面跟着的参数 进行操作
  • getopts
    获取 脚本后面的选项
  • getopt
    获取脚本后面的可变选项
  • read
    从键盘或者文件中读取参数
    这几种方案
    参考地址:
    http://diseng.github.io/2015/04/15/shell-argvs-type

    直接接收shell脚本后面的参数

    调用脚本的格式
    1
    xxx.sh arg1 arg2

脚本中获取参数的方式
$1 = arg1
$2 = arg2

注意点:

  • $0:指脚本本身
  • $(num)脚本后面跟着的参数 num从1开始
  • $#:入参的总数 不包含脚本本身
  • $@:入参列表 不包含脚本本身
  • $*:和$@相同,但”$” 和 “$@”(加引号)并不同,”$“将所有的参数解释成一个字符串,而”$@”是一个参数数组
    例子:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    echo '
    #!/bin/bash
    echo $1
    echo $2
    echo $0
    echo $#
    echo $@
    echo $*
    ' > test.sh
    chmod +x ./test.sh
    ./test.sh ming jiu

getopts

带选项方式接收入参
调用脚本的方式

1
xxx.sh -a -b 'xx'

定义选项的方式
定义ab两个选项 a不带:不接收参数 b带:必须接收参数

1
getopts "ab:"

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo '
#!/bin/bash
while getopts "ab:" arg
do
case $arg in
a)
echo "选项$arg"
;;
b)
echo "选项$arg,参数:$OPTARG"
;;
esac
done
' > test.sh
chmod +x ./test.sh
./test.sh -a
./test.sh -b ming
./test.sh -a -b ming
./test.sh -b

getopt

增强版本的getopts 可以接收长参数、可以指定可选参数
调用脚本方式

1
xxx.sh -a -b bval --aparam

定义接收参数的格式

  • 没有:不接受参数
  • 一个:接收参数
  • 两个:选项参数可选
    -o 设置短选项 -l 设置长选项
    ARGS后面不是单引号(‘) 是制表符(tab)上面的那个英文符号(`)
    1
    2
    ARGS=`getopt -o ab: -l"aparam::,help" -- "$@"`
    eval set --"${ARGS}"

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash

ARGS=`getopt -o ab: -l "aparam:,help" -- "$@"`
eval set -- "${ARGS}"

while true;
do
case "$1" in
-a)
echo "-a "
shift
;;
-b)
echo "-b $2"
shift 2
;;
--aparam)
echo "-aparam $2"
shift 2
;;
--help)
echo "help"
exit 0
;;
--)
shift
break
;;
*)
echo "错误!"
exit 1
;;
esac
done

' > test.sh
chmod +x ./test.sh
./test.sh -a -b bbbb --aparam aaaapp

read

利用接收键盘输入来输入参数

1
2
3
4
5
6
7
8
echo '
#!/bin/bash
read -p "请输入参数:" name
echo "输入的参数${name}"
exit 0
' > test.sh
chmod +x ./test.sh
./test.sh

总结

shell接收参数方式 总的来说 简单脚本 直接使用 $1 …就够用了
如果要设计复杂的参数 可以使用 getopt getopts 来编写
要进行交互式的 可以使用 read 读取键盘输入来执行
或者甚至可以利用 其他的命令 从文件 从标准输出中读取数据 利用 xargs 这样的套路去配置参数

------ 本文结束 ------

版权声明
ming创作并维护,博客采用CC协议
本文首发于ming 博客( https://blog.xujiuming.com ),版权所有,转载请注明出处!