关于bash:将2个参数发送到脚本

Send 2 parameters to a script

我刚开始使用bash,所以我希望答案不明显。我有一个名为playlists.txt的文件,如下所示:

  • 冷却子步骤plynrad9jn2wdwrrs_uw6ur55k-c_s6eh4
  • 经典plynrad9jn2wdwzfpig3a2tkobttenabc6
  • 冷冻机PLynrad9jn2wcfucos22kn3pbx1xuffine
  • 圆滑滑的PLynrad9jn2wdmpu3gnvxivo8baiocqkx7
  • 专辑,音乐会Plynrad9jn2wd3bi8o5vjmsbhzgfyh5zax

我想将每行的第一个字符串分配给$name,将第二个字符串分配给$hash,然后将其发送给script.sh,并对每行递归执行此操作,因为知道将来行数可能会增加。

我写了这封信,但它不起作用:使用这个->如何在bash shell中将一个字符串分割成多个变量?

1
2
3
4
5
6
while read name hash
do

        sh script.sh"$name""$hash"

done < playlists.txt

我应该做什么?提前谢谢。

编辑:谢谢,伙计们,所以我把它改成了这个,它更容易阅读。我以为,它会解决我的错误,但仍然存在……该死的。所以基本上,在script.sh中,这里是第一部分:

1
2
3
cd ~/Music/Youtube\ Playlist/Playlists/$name

mv $HOME/Music/Youtube\ Playlist/Playlists/$name/TextRecords/lastoutput.txt $HOME/Music/Youtube\ Playlist/Playlists/lastoutput.txt

但是,shell返回错误:

1
mv: cannot stat `/home/kabaka/Music/Youtube Playlist/Playlists//TextRecords/lastoutput.txt': No such file or directory

这意味着在播放列表的名称应该存在的地方,什么都没有。你知道为什么吗?是因为我当前脚本中的$name和上面脚本中的$name不同吗?注意,对于$hash,我也有同样的事情发生,它应该出现在一个URL中,但只是一个空白。


  • 可以使用管道将echo命令的输出用作输入文件,
  • 标记"-d"为"cut"命令定义分隔符。
  • 代码如下:

    1
    2
    3
    4
    5
    6
    7
    while read line
    do
        name=`echo $line|cut -f1 -d' '`
        hash=`echo $line|cut -f2 -d' '`
        sh script.sh $name $hash

    done < playlists.txt

    第二个问题:在将文件移动到目录之前,请确保它存在。您可以使用"mkdir-p"创建它,如下所示:

    1
    mkdir -p $HOME/Music/Youtube\ Playlist/Playlists/lastoutput.txt


    它就快开始工作了,只说read name hash而不是read line

    1
    2
    3
    while read name hash; do
        sh script.sh"$name""$hash"
    done < playlists.txt


    你就快到了,有几种方法可以做到这一点,但一个典型的解决方案是

    1
    2
    3
    4
    while read name hash
    do
         sh script.sh $name $hash
    done < playlists.txt

    伊希思