一个bash脚本,用于使用bash脚本

时间:2016-02-10 00:56:32

标签: bash sed scripting gnu-screen

我正在尝试编写一个bash脚本来运行几个案例,其中的步骤如下:

  1. 读取数组中的.txt文件
  2. 使用特定字符串
  3. 连接数组的每个元素
  4. 以分离模式打开多个屏幕,然后更改特定文件 (在这种情况下为seq.txt)并运行一些命令
  5. 代码如下:

    COUNTER=0
    readarray t1Gad < t1_gad.txt
    while [  $COUNTER -lt 5 ]; do
        NUM_DEVICE=8
        DEVICE_NO=`expr $COUNTER % $NUM_DEVICE`
        string1='objGa_'
        string2=${t1Gad[$COUNTER]}
        #string2='hello'
        string=$string1$string2
        echo $string2
        echo $string1
        echo $string
        screen -d -m -S "$COUNTER" bash -c 'cd $HOME/Downloads && sed -i '2s/.*/$string/' seq.txt && cat seq.txt; exec sh'
        let COUNTER=COUNTER+1
    done
    

    有趣的是,如果我用固定字符串替换string2,它工作正常,但它不能处理数组的数组元素。

    如果有人向我解释,我会很高兴。我是新手来编写脚本,但却非常想学习这个非常有用但丑陋的脚本语言。

    我发现了问题,但我不知道如何解决它。在进行字符串连接时,例如

        string1="objGa_"
    string="$string1${t1Gad[$COUNTER]}"
    

    (比如192是那个特定元素),在这种情况下它取代

    objGa_192 ' ' 
    

    在屏幕内。我不知道如何摆脱那个空间及其来源。

    t1_gad.txt:

    100
    200
    300
    400
    500
    

    seq.txt:

    abc
    objw
    cde
    efg
    xyz
    

1 个答案:

答案 0 :(得分:1)

readarray在每个变量的末尾放置一个空格,这似乎导致sed命令出现问题。

一种优雅的方法是删除一个跟踪空格是将字符串传递给xargs

string2=$(echo ${t1Gad[$COUNTER]} | xargs)