从参数中分离出选项
有时需要在同一脚本中使用选项和参数。你必须把它们分开。通过这样做,您可以告诉bash参数在哪里,选项在哪里。
我们使用选项列表末尾的双破折号(-)。shell看到双破折号后,它将剩余的输入视为参数,而不是选项。
#!/bin/bash while [ -n "" ]; do # while loop starts case "" in -a) echo "-a option passed" ;; # Message for -a option -b) echo "-b option passed" ;; # Message for -b option -c) echo "-c option passed" ;; # Message for -c option --) shift # The double dash which separates options from parameters break ;; # Exit the loop using break command *) echo "Option not recognized" ;; esac shift done total=1 for param in jack@onitroad; do echo "#$total: $param" total=$(($total + 1)) done
$ ./myscript -a -b -c -- 5 10 15
检查参数
有时候,我们需要判断是否传递了参数来决定是否执行下一步操作:
#!/bin/bash if [ -n "" ]; then # 如果传递了第1个参数,则打印 Hi echo Hi . else echo "No parameters found. " fi
处理带值的选项
有时,在Linux bash shell脚本中,会有带值的选项
./myscript -a value1 -b -c value2
可以使用下面方法,处理值:
#!/bin/bash while [ -n "" ]; do # while loop starts case "" in -a) echo "-a option passed" ;; -b) param="" echo "-b option passed, with value $param" shift ;; -c) echo "-c option passed" ;; --) shift # The double dash makes them parameters break ;; *) echo "Option not recognized" ;; esac shift done total=1 for param in "jack@onitroad"; do echo "#$total: $param" total=$(($total + 1)) done
执行:
$ ./myscript -a -b test1 -d
标准选项
当我们启动Linux Bash脚本时,我们可以自由选择哪个字母适合选项。
但是,某些字母通常用于Linux程序。
此前是常用选项示例:
-a | 列出所有项目。 |
-c | 获得物品的计数。 |
-d | 输出目录。 |
-e | 展开项目。 |
-f | 指定文件。 |
-h | 显示帮助页面。 |
-i | 忽略字符案例。 |
-l | 列出文本。 |
-n | 说不是一个问题。 |
-o | 将输出发送到文件左右。 |
-q | 保持安静;不要问用户。 |
-r | 递归地处理一些东西。 |
-s | 隐身模式。 |
-v | 冗长模式。 |
-x | 指定可执行文件。 |
-y | 在不提示用户的情况下说是的。 |
bash shell 读取参数
shell为我们提供一些易于使用的变量来处理输入参数:
- $0是脚本的名称。
- $1是第一个参数。
- $2是第二个参数。
shell可以读取9个参数。
示例:
#!/bin/bash echo./myscript 5 10 15# 脚本名称 echo # 第1个参数 echo # 第2个参数 echo # 第3个参数
执行脚本
#!/bin/bash echo There were $# parameters passed.
统计参数的数量
要获取传递的参数,可以使用此变量($#)。
./myscript 1 2 3 4 5
#!/bin/bash echo 最后一个参数 ${!#}
Linux Bash脚本 如何获取最后一个参数?
#!/bin/bash echo "The first variable $* method: $*" echo "-----------" echo "The second variable \jack@onitroad method: jack@onitroad"
迭代参数
变量$*
保存了所有的参数。
#!/bin/bash total=1 for var in "$*"; do echo "$* =======> #$total = $var" total=$(($total + 1)) done total=1 for var in "jack@onitroad"; do echo "\jack@onitroad =======> #$total = $var" total=$(($total + 1)) done
#!/bin/bash while [ -n "" ]; do # while loop starts case "" in -a) echo "-a option passed" ;; # Message for -a option -b) echo "-b option passed" ;; # Message for -b option -c) echo "-c option passed" ;; # Message for -c option *) echo "Option not recognized" ;; # In case you typed a different option other than a,b,c esac shift done
Bash脚本选项
选项是前带破折号的单个字母。
$ ./myscript -op1 -op2 -op3 -op4##代码##
日期:2020-07-15 11:16:39 来源:oir作者:oir