2017-04-06 81 views
1

我试图错误陷阱用户输入。错误陷阱用户输入 - Bash脚本循环

- 我需要用户输入文件名。

- 有些用户正在输入完整的URL,并杀死了脚本的其余部分。

  • 因此,如果用户输入http://我希望脚本给出一个错误消息,并让他们只输入文件名。

- 每次用户输入网址时都需要重复。

  • 如果他们输入文件名,则执行脚本的其余部分。

这是我到目前为止。如果用户输入的网址,一旦它的工作原理,但如果他错了输入两次它将执行脚本

#!/bin/bash 
read -p "Enter File : " string 

if [[ $string -ne *”http://“* ]]; 
then 
s3cmd get s3://backup/domain.com/$string 



elif [[ $string -ne *"http://"* ]]; 
echo “You entered the full URL, enter on the file name“ 
read -p "Enter File : " string 

then 

s3cmd get s3://backup/domain.com/$string 

else 
    echo "rest of script" 
fi 

回答

0

的其余部分如果能够检测到用户输入一个完整的网址,那么为什么不干脆剥离前缀,避免打扰用户?

http_prefix="http://" 
if 
    [[ $string =~ ^$http_prefix(.*) ]] 
then 
    string=${BASH_REMATCH[1]} 
fi 

=~运营工作中使用bash双斗提试验。它匹配一个扩展的正则表达式,匹配的子表达式(圆括号内的内容)放在BASH_REMATCH数组中,第一个子表达式位于索引1处。如果匹配失败,则测试返回一个非零值,在这种情况下,字符串保持原样。

请注意,这并不能确保网址有效,只是它不以“http://”开头,所以我想说这更像是一个玩具示例,而不是生产就绪代码。