谁能解释这个bash shell脚本?

时间:2019-12-11 10:52:00

标签: bash shell

'while [ "$1" != "" ]
   do
    case "$1" in
            -a) AUTO=1; shift;;
            -A) AUTO=1; AUTOIGNORE=1; shift;;
            -E) EXCLUDE=$2; shift 2;;
            -o) NOAUTOIGNORE=1; shift;;
            --help) print_help; exit $STATE_OK;;
            -h) print_help; exit $STATE_OK;;
            -m) MTAB=$2; shift 2;;
            -f) FSTAB=$2; shift 2;;
            -N) FSF=$2; shift 2;;
            -M) MF=$2; shift 2;;
            -O) OF=$2; shift 2;;
            -T) TIME_TILL_STALE=$2; shift 2;;
            -i) IGNOREFSTAB=1; shift;;
            -w) WRITETEST=1; shift;;
            -L) LINKOK=1; shift;;
            -e) DFARGS=$2; shift 2;; 
            /*) MPS="${MPS} $1"; shift;;
            *) usage; exit $STATE_UNKNOWN;;
    esac'

有人可以解释一下while循环是做什么的吗?这些变量表示什么,这里的移位是什么意思?

3 个答案:

答案 0 :(得分:0)

以DEBUG模式执行脚本。 示例:./bash -x NameOFScript.sh或./bash -x NameOFScript.sh参数...

显示的代码段,WHILE循环,CASE语句用法在那里。

Case Statement in a while loop, shell scripting

答案 1 :(得分:-1)

此代码段分析传递给脚本的参数,并设置一些变量。参数包含在$ 1 $ 2之类的变量中。

使用循环,将扫描所有参数。在循环内,仅检查$ 1(通过case命令),然后使用“ shift”命令移动参数,删除第一个参数($ 1)。转移后,先前的$ 1丢失了,新的$ 1包含了先前$ 2包含的内容。

请注意,某些参数(例如“ -E”)必须后跟另一个参数。在这种情况下,如果检测到“ -E”为$ 1,则还会使用$ 2,并再进行一次移位。

通过在循环的末尾添加一个班次,并删除每种情况下指定的许多内容,此片段可能会更加简洁。

答案 2 :(得分:-2)

正在读取输入$ 1是注释后的下一部分,例如

ls -l 

您有$ 1 =“-l”。

,如果您有$1$2$3,则shift转换变量,然后通过转换使$2成为新的$1和{{ 1}}使shift 2成为新的$3