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语句中对脚本中的某一行执行goto
或loop
?因此,我不必再次重写这些操作(这似乎毫无意义)。
我正在制作这类东西:
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根据需要循环其中任何一个。
答案 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