两个问题(抱歉,如果我囤积太多)

时间:2017-09-05 16:29:07

标签: bash

1)我在bash中创建了一个程序,要求输入文件名,然后在为convert赋予变量$name之后运行read这样的文件名。它正在搜索的目录也有空格,我已经按照以下方式进行了整理:

read -p "please input filename: " file
convert /path/to/that/file/with/bothersome\ spaces/here/$file.png /destination/path/to/that/file/with\ some/spaces/$file.pdf 

一切都很好......直到文件名本身恰好有空格。 我尝试将变量$file输入$FILE$"file""$file"'$file',但似乎都没有。

2)我有什么方法可以在if语句中对脚本中的某一行执行gotoloop?因此,我不必再次重写这些操作(这似乎毫无意义)。

我正在制作这类东西:

echo "do this or that? [a, b] "
read input

if [[ $input == "a" ]]; then
{
app1
app2
app3
} &> /dev/null

(在这一点上,我希望能够让我再次询问是否要循环此过程或完全退出脚本。)然后...

else
{
app4
app5
app6
} &> /dev/null

(与前一个括号相同)

fi
exit

所以是的,就是这样。如果两者都无法回答,我可以管理只是回答第二个并根据需要重新运行该脚本(如果我需要再次执行它或其他什么)。

非常感谢你的帮助。

编辑:这是原始文件

    #!/bin/bash

echo "Do this type of file or the other? [a, b] "
read input

if [[ $input == "A" || $input == "a" ]]; then
{
/usr/bin/app1 "/path/to/open" &
/usr/bin/app2 "/file/to/open.file" &
/usr/bin/app3 "/file/to/open.file" &
/usr/bin/app4 &
/usr/bin/app5 &
} &> /dev/null
while :; do #attempting what Barmar said. this is the particular part i want to loop from each section
echo "stuff opened"
read -p "please input filename: " file
convert /original/file/"$file".png /converted/file/"$file".pdf
echo "do another one? [Y,N] " stop
if [[ $stop == "n" || $stop == "N" ]]; then
break   
wait
else
{
/usr/bin/app6 "/different/file/to/open" &
/usr/bin/app7 "/different/file/to/open.file" &
/usr/bin/app8 "/different/file/to/open.file" &
/usr/bin/app9 &
/usr/bin/app10 &
} &> /dev/null
while :; do #attempting what Barmar said. this is the particular part i want to loop from each section
read -p "please input file:  " file
convert /original/file/"$file".png /converted/file/"$file".pdf
echo "do another one? [Y,N] " stop
if [[ $stop == "n" || $stop == "N" ]]; then
break   
wait
fi

以这种特殊方式执行它会破坏if语句。

我想要的是,第一个IF要么是第一个应用程序块,要么是convert部分,要么是第二个应用程序块,然后是convert部分。然后在convert部分内的另一个IF根据需要循环其中任何一个。

1 个答案:

答案 0 :(得分:1)

1)双引号应该这样做。

convert /path/to/that/file/with/bothersome\ spaces/here/"$file".png /destination/path/to/that/file/with\ some/spaces/"$file".pdf 

2)使用while循环,并使用break停止循环。

while :; do
    echo "do this or that? [a, b] "
    read input

    if [[ $input == "a" ]]; then
        {
        app1
        app2
        app3
        } &> /dev/null
        read -p "Stop? " stop
        if [[ $stop == "y" ]]; then
            break
        fi
    else
        {
        app4
        app5
        app6
        } &> /dev/null
    fi
done