【问题标题】:Assign command line argument to variable in shell script将命令行参数分配给shell脚本中的变量
【发布时间】:2014-08-11 08:14:28
【问题描述】:
#!/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 将在这里给出第一个参数是 xyz,我需要 $1,$2,$3... 值但是当我这样编码时,我得到的 dirname 值为 1 ------但期待 xyz 请您帮忙完成此任务.. 提前致谢
  • 你能更新你的标题,让读者知道你在问什么吗? “Shell 脚本”太宽泛了。

标签: shell unix command-line-arguments


【解决方案1】:

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

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

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

dirname=${!dir_no}

【讨论】:

  • 感谢 Llama,我刚刚在代码中添加了一行 echo ${!dir_no} ,但是当我尝试执行它时抛出错误“while.sh: 11: while.sh: Bad replacement " 在没有 echo ${!dir_no} 的情况下,它正在执行但没有得到所需的输出。
  • @user3686069 - 你有 Bash 作为 shell 吗?尝试将您的第一行更改为#!/bin/bash
  • 我有 Bash Shell ,我将第一行更改为 #!/bin/bash 即使我遇到了同样的错误,这是什么原因?
  • 我将我的代码迁移到其他机器上......现在它符合我的要求......谢谢大家。 :)
猜你喜欢
  • 2016-05-05
  • 1970-01-01
  • 2015-01-21
  • 2018-03-12
  • 2013-03-06
  • 2014-03-08
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
相关资源
最近更新 更多