将命令行参数分配给shell脚本中的变量

时间:2014-06-20 14:23:42

标签: shell unix command-line-arguments

#!/bin/sh

a=0

while [ $a -lt $# ]
do
   var_no=$a
    echo "var_no value is $var_no"
    dir_no=`expr $a + 1`
    dirname=$dir_no
    echo "dirname value is $dirname" # $n is the command line arg   
    if [ -d $dirname ]
        then
        echo " $dirname exists"
        else
        echo "[$dirname]  not exist"
        mkdir $dirname;
    fi
   a=`expr $a + 1`
done

当我尝试从参数赋值给shell变量时,它没有显示预期的输出,如下所示。

输出

$sh while.sh xyz yzx
var_no value is 0
dirname value is 1 ------ but expecting xyz
This dirname 1 exists 
var_no value is 1 
dirname value is 2 ------ but expecting yzx
This dirname 2 exists

1 个答案:

答案 0 :(得分:1)

问题在于这一行:dirname=$dir_no

您正在使用目录号码破坏您的目录名称。这将为您提供$1$2等的价值。这会为您提供一个数字(12等)。

如果您想要变量$1$2等,则需要使用variable variable

dirname=${!dir_no}