从参数中分离出选项

有时需要在同一脚本中使用选项和参数。你必须把它们分开。通过这样做,您可以告诉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脚本参数和选项

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