阅读过前两篇shell
的入门知识,你已经可以编写自己的shell脚本了。今天我们来接着介绍linux中其他bash命令
假如我们想将数据传递到shell,我们就需要获取命令行参数,来与我们的shell交互。
一、读取命令行参数:
shell为您提供了一些读操作,可以使用变量来处理输入参数:
- $0: 脚本名字
- $1: 第 1 个参数
- $2: 第 2 个参数
- …
我们来编写脚本demo.sh
:
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
执行脚本,查看结果:
sh demo.sh 9 99 999
demo.sh
9
99
999
我们计算两个参数的和:
#!/bin/bash
total=$(( $1 + $2 ))
echo 第一个参数: $1
echo 第二个参数: $2
echo Total: $total
运行,查看结果:
sh demo.sh 9 99
第一个参数: 9
第二个参数: 99
Total: 108
命令行参数不仅可以数字,还可以是字符串。
$#
可以读取命令行参数的个数:
#!/bin/bash
echo 参数个数为: $#
sh demo.sh 1 2 3 4
参数个数为:4
$*
将所有参数作为一个值
$@
将所有参数作为单独的值保存,因此可以对它们进行迭代
我们来看一个例子:
#!/bin/bash
total=1
for var in "$*"; do
echo "\$* =======> #$total = $var"
total=$(($total + 1))
done
total=1
for var in "$@"; do
echo "\$@ =======> #$total = $var"
total=$(($total + 1))
done
我们执行查看结果如下:
sh demo.sh 2 3 4
$* =======> #1 = 2 3 4
$@ =======> #1 = 2
$@ =======> #2 = 3
$@ =======> #3 = 4
我们看到 $*
将所有参数作为一个值输出,而$#
可以遍历出所有的参数。
对于参数前面带有 -
的选项,依然可以通过上述形式获取。
二、shift 的使用
我们可以使用shift命令实现参数迭代,我们看一个例子:
#!/bin/bash
total=1
while [ -n "$1" ]; do # 循环
echo "#$total = $1"
total=$(($total + 1))
shift
done
我们执行 sh demo.sh 1 2 3 4
,结果如下:
#1 = 1
#2 = 2
#3 = 3
#4 = 4
三、我们将普通参数与 -
选项分开获取
看例子:
#!/bin/bash
while [ -n "$1" ]; do # while loop starts
case "$1" in
-a) echo "-a 选项" ;; # Message for -a option
-b) echo "-b 选项" ;; # Message for -b option
-c) echo "-c 选项" ;; # Message for -c option
--)
shift # The double dash which separates options from parameters
break
;; # Exit the loop using break command
*) echo "$1 不能匹配" ;;
esac
shift
done
total=1
for param in $@; do
echo "#$total: $param"
total=$(($total + 1))
done
我们执行sh demo.sh -a -b -- 2 3
,结果如下:
-a 选项
-b 选项
#1: 2
#2: 3
我们看到我们经常需要指定一个分隔符--
,用来区分选项
与参数
四、一些常用标准选项参数
- -a :列出所有选项
- -f :指定文件
- -c:获取项目计数
- -d:输出目录
- -o:将输出发送到文件中
参考:
往期: