【问题标题】:error trap user input - Bash script loop错误陷阱用户输入 - Bash 脚本循环
【发布时间】:2017-04-06 01:49:35
【问题描述】:

我试图错误捕获用户输入。

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

-一些用户正在输入完整的 url,这会杀死脚本的其余部分。

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

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

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

这是我到目前为止所拥有的。如果用户输入 url 一旦它工作,但如果他输入错误两次,它将执行脚本的其余部分

#!/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

【问题讨论】:

    标签: bash loops error-handling


    【解决方案1】:

    如果您可以检测到用户输入了完整的 URL,那么为什么不简单地去掉前缀并避免打扰用户呢?

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-29
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2017-05-22
      • 2020-06-22
      • 1970-01-01
      • 2017-04-17
      • 2016-12-18
      相关资源
      最近更新 更多