如何将输入字符串拆分为多个变量

How to split input string into multiple variable

我正在编写 shell 脚本并尝试将用户输入拆分为多个变量并在不同的地方使用它们。

用户输入不固定所以不能真正分配固定数量的变量,输入以逗号分隔,

./user_input.ksh -string /m01,/m02,/m03

#!/bin/ksh
STR=

function showMounts {
    echo "$STR"

    arr=($(tr ',' ' ' <<< "$STR"))
    printf "%s\n" "$(arr[@]}"

   for x in "$(arr[@]}"
     do
       free_space=`df -h "$x" | grep -v "Avail" | awk '{print }'`
       echo "$x": free_space "$free_space"
    done

#total_free_space = <total of $free_space>
#echo "$total_free_space"
}

基本上 $STR* 变量值是文件系统挂载点

如果 运行 单独的 df -h 命令

主机输出
$ df -h /m01 | grep -v "Avail" | awk '{print }'

***Output***
 150

当前问题:

(working)1. How to get free space available for each /m* using df -h?

你可以试试,

#!/bin/ksh
STR=/m01,/m02,/m03
read STR1 STR2 STR3 <<<`echo $STR | awk 'BEGIN{FS=","; OFS=" "}{=; print}'`
echo $STR1 - $STR2 - $STR3

你得到:

/m01 - /m02 - /m03

主题变体:

# cat user_input.ksh

#!/bin/ksh
c=1
for i in $(echo ${@} | tr "," " ")
do
    eval STR$c="$i"
    ((c=c+1))
done

printf "$STR1 = %s; $STR2 = %s; $STR3 = %s; ...\n" "$STR1" "$STR2" "$STR3"

这给你:

# ksh ./user_input.ksh /m01,/m02,/m03,/m04
$STR1 = /m01; $STR2 = /m02; $STR3 = /m03; ...

希望对您有所帮助..

--ab1

最简单的方法是在这里使用 shell 数组,如下所示:

#!/bin/ksh
str='/m01,/m02,/m03'

arr=($(tr ',' ' ' <<< "$str"))
printf "%s\n" "${arr[@]}"

输出:

/m01
/m02
/m03

要单独读取元素,您可以使用:

"${arr[0]}"
"${arr[1]}"
...

更新:这是您更正的脚本:

#!/bin/ksh
STR=""

arr=($(tr ',' ' ' <<< "$STR"))
printf "<%s>\n" "${arr[@]}"

for x in "${arr[@]}"; do
   echo "$x"
   free_space=`df -h "$x" | awk '!/Avail/{print }'`
   echo "$free_space"
done
$ cat tst.sh
str='/m01,/m02,/m03'
IFS=,
set -- $str
for i
do
    echo "$i"
done

$ ./tst.sh
/m01
/m02
/m03

除非您要导出它们,否则不要对变量名使用全部大写(按照惯例并避免与 HOME、PATH、IFS 等内置名称发生冲突)。

对于你的整体脚本,你应该简单地做这样的事情:

df -h "${str//,/ }" | awk '/^ /{print , ; sum+=} END{print sum}'

取决于您的 df -h 输出结果以及您的最终输出结果。