在 Linux Shell 编程中,while 循环和 shift 命令经常一起使用来处理命令行参数。下面是详细的说明和示例。


while 循环和 shift 命令

while:用于循环执行命令。

shift:用于移动命令行参数的位置,每调用一次,所有位置参数都会左移一位,即 $2 变成 $1,依此类推。


示例:处理命令行参数

通过一个具体的示例来展示如何使用 while 循环和 shift 命令来处理不定数量的命令行参数。


示例脚本 process_args.sh


#!/bin/bash

while [ "$#" -gt 0 ]; do
    case $1 in
        -f|--file)
            file="$2"
            echo "File: $file"
            shift 2
            ;;
        -n|--name)
            name="$2"
            echo "Name: $name"
            shift 2
            ;;
        -h|--help)
            echo "Usage: $0 [-f|--file filename] [-n|--name name] [-h|--help]"
            exit 0
            ;;
        *)
            echo "Unknown option: $1"
            exit 1
            ;;
    esac
done
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

解释

while [ "$#" -gt 0 ]:检查剩余位置参数个数是否大于零。如果是,则进入循环体。

case $1 in ...:根据第一个参数的值进行模式匹配。

-f|--file:当参数为 -f 或 --file 时,读取下一个参数作为文件名。

-n|--name:当参数为 -n 或 --name 时,读取下一个参数作为名字。

-h|--help:当参数为 -h 或 --help 时,显示帮助信息并退出。

*:默认情况,当遇到未识别的选项时,输出错误信息并退出。

shift 2:左移两次,跳过当前选项及其参数。

shift:如果只想跳过当前参数,可以使用 shift 1 或简写 shift。


使用方法

假设你已经将上述脚本保存为 process_args.sh,并赋予其可执行权限:


chmod +x process_args.sh
  • 1.

运行脚本:


./process_args.sh -f example.txt -n JohnDoe
  • 1.

输出:


File: example.txt
Name: JohnDoe
  • 1.
  • 2.

示例:处理不定数量的参数

下面是另一个示例,展示了如何处理不定数量的命令行参数,不需要具体的选项,只需遍历每个参数即可。


示例脚本 print_args.sh


#!/bin/bash

while [ "$#" -gt 0 ]; do
    echo "Argument: $1"
    shift
done
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

解释

while [ "$#" -gt 0 ]:检查剩余位置参数。

echo "Argument: $1":输出当前参数。

shift:左移一个参数。

使用方法

假设你已经将上述脚本保存为 print_args.sh,并赋予其可执行权限:


chmod +x print_args.sh
  • 1.

运行脚本:


./print_args.sh arg1 arg2 arg3
  • 1.

输出:


Argument: arg1
Argument: arg2
Argument: arg3
  • 1.
  • 2.
  • 3.

总结

while 循环:用于迭代处理每个命令行参数。

shift 命令:用于移动命令行参数的位置,以便在每次迭代中处理下一个参数。

通过上面的示例,你应该能够理解如何在 Linux Shell 脚本中使用 while 和 shift 来处理命令行参数。