我想运行一个带有一些参数传递的shell脚本,参数的数量将不断变化,我想首先读取传递的参数总数然后读取每个参数并将这些参数存储在变量中“for”或“while”循环的帮助,我正在做如下但没有将参数分配给变量
运行脚本如下 sh My_script.sh ARG1 ARG2 ARG3 ... ARGn
我试着写如下
#!/bin/bash
TOTAL_ARG=$#
NEW_PATH=""
n=1
While [[ $n -le $TOTAL_ARG ]]
do
CUS_PATH=""
CUS_PATH="$`echo $n`"
NEW_PATH="$WORSPACE"/"$CUS_PATH"" "
echo $NEW_PATH
n=$((n+1))
done
看起来CUS_PATH =“$ echo $n
”行无法执行并产生$ 1 $ 2 $ 3 $ 4 ... $ n
答案 0 :(得分:0)
所有循环都是不必要的。您的代码可以减少为:
#!/bin/bash
new_path="$*"
echo "new_path is '$new_path'"
例如,在你的参数列表中运行它:
$ bash My_script.sh ARG1 ARG2 ARG3 ... ARGn
new_path is 'ARG1 ARG2 ARG3 ... ARGn'
如果你真的想通过变量n
中的数字来访问一个参数(这很少需要):
#!/bin/bash
new_path="$*"
echo "new_path is '$new_path'"
n=3
echo "Argument #$n is '${!n}'"
举个例子:
$ bash My_script.sh ARG1 ARG2 ARG3 ... ARGn
new_path is 'ARG1 ARG2 ARG3 ... ARGn'
Argument #3 is 'ARG3'
尝试:
$ cat My_script.sh
#!/bin/bash
workspace=/abc/def
for x in "$@"
do
new_path="$new_path $workspace/$x"
done
echo "new_path is '$new_path'"
例如:
$ bash My_script.sh ARG1 ARG2 ARG3 ... ARGn
new_path is ' /abc/def/ARG1 /abc/def/ARG2 /abc/def/ARG3 /abc/def/... /abc/def/ARGn'
<强>可替换地:强>
$ cat My_script.sh
#!/bin/bash
workspace=/abc/def
new_path=" $*"
new_path=${new_path// / $workspace/}
echo "new_path is '$new_path'"
$ bash My_script.sh ARG1 ARG2 ARG3 ... ARGn
new_path is ' /abc/def/ARG1 /abc/def/ARG2 /abc/def/ARG3 /abc/def/... /abc/def/ARGn'