如何拆分输入字符串成多个变量 [英] How to split input string into multiple variable

查看:134
本文介绍了如何拆分输入字符串成多个变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的shell脚本,并试图对用户输入分割成多个变量,并在不同的地方使用它们。

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

  ./ user_input.ksh -string / M01,/ M02,/ M03#!/ bin中/ KSH
STR = $ 16功能showMounts {
    回声$ STR    ARR =($(TR','''<<<$ STR))
    printf的%S \\ n$(ARR [@]}   在X$(ARR [@]}
     做
       FREE_SPACE =`DF -h$ X| grep的-v效用| AWK'{打印$ 4}'`
       回声$ X:FREE_SPACE$ FREE_SPACE
    DONE#total_free_space =<累计$ FREE_SPACE制造>
#echo$ total_free_space
}

基本上$ STR *变量的值是文件系统的安装点

如果运行单独的主机输出 DF -h 命令

  $ DF -h / M01 | grep的-v效用| AWK'{打印$ 4}'*** ***输出
 150

目前存在的问题:

 (工作)1。如何使用DF -h获得可用于每个空间/ M?


解决方案

做最简单的事情就是在这里使用的shell数组是这样的:

 #!/ bin中/ KSH
海峡='/ M01,/ M02,/ M03ARR =($(TR','''<<<$海峡))
printf的%S \\ n$ {ARR [@]}

输出:

  / M01
/ M02
/ M03

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

 $ {ARR [0]}
$ {改编[1]}
...


更新:以下是您纠正脚本:

 #!/ bin中/ KSH
STR =$ 2ARR =($(TR','''<<<$ STR))
printf的<%S> \\ N$ {ARR [@]}对于x在$ {ARR [@]};做
   回声$ X
   FREE_SPACE =`DF -h$ X| awk的'!/效用/ {打印$ 4}'`
   回声$ FREE_SPACE
DONE

I'm working on shell script and trying to split user input into multiple variable and use them at different places.

User input is not fixed so can't really assign fixed number of variable, input is separated by comma ,

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

#!/bin/ksh
STR=$2

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 $4}'`
       echo "$x": free_space "$free_space"
    done

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

Basically $STR* variable value is filesystem mount points

Host output if run separate df -h command

$ df -h /m01 | grep -v "Avail" | awk '{print $4}'

***Output***
 150

Current problems:

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

解决方案

Easiest thing to do is to use shell array here like this:

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

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

Output:

/m01
/m02
/m03

To read elements individually you can use:

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


Update: Here is your corrected script:

#!/bin/ksh
STR="$2"

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

for x in "${arr[@]}"; do
   echo "$x"
   free_space=`df -h "$x" | awk '!/Avail/{print $4}'`
   echo "$free_space"
done

这篇关于如何拆分输入字符串成多个变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆