2017-08-08 112 views
0

您好我是bash的新手,所以请原谅我,如果我有一个非常愚蠢/简单的问题。我正在编写一个脚本,允许用户更改他们的区域(无线)。我想要做的就是进行检查,如果输入的值不正确,则会再次提示输入区域。我想通过检查命令sudo iw reg set $reg的输出来检查,如果它是一个正确的输入,就没有输出。但如果它是一个错误的输入,它会给出一个错误信息。我试图做到这一点,但即时得到一个错误:如果bash命令的输出为空,请执行下列操作

#!/bin/bash 
echo "Please set a region: " 
read reg 

if [(sudo iw reg set $reg) -ne 0]; then 
    echo "Please set a valid region: " 
    read reg 

else  
    echo "Setting reg as $reg" 
    sudo iw reg set $reg 
fi 

在此先感谢

回答

1

可以使用-z试验,型式help test在Bash中了解更多(test是一样的[命令)。

您应该只拨打iw reg set一次,除非它失败。

echo "Please set a region: " 

while true # infinite loop 
do 

    # read in the region: 
    read reg 

    # try the command, and catch its output: 
    output=$(sudo iw reg set "$reg" 2>&1) 

    if [ -z "$output" ] 
    then 
     # output is empty - success - leave the loop: 
     break 
    else 
     # output is non-empty - continue: 
     echo "Please set a valid region. " 
    fi 

done 

这段代码检查你在你的问题(空输出),获得成功的条件,但应注意的是,通常的退出代码应尽可能使用。

注意2>&1操作符将stderr重定向到stdout,因此任何一个文件描述符上的任何输出都将被视为失败。

+0

这15+行脚本与我之前发布的3行完全相同。 – anubhava

+0

@anubhava你是否暗示我从你身上复制过来的? –

+0

哦,不要谈论复制。我在编程上用相同的代码 – anubhava

2

您可以在while循环使用read

while read -r -p "Please set a valid region: " reg; do  
    [[ -z "$(sudo iw reg set $reg)" ]] && break 
done 

help read给出了这样的:

  • -r不允许反斜杠转义任何字符RS
  • -p prompt输出未经尾随的换行符的字符串提示 之前试图读取
  • $(...)command substitution执行命令,并返回输出
  • -z返回true当给定的字符串参数(iw命令的输出)为空
+0

嗨,谢谢你的回答,你介意解释代码的作用吗?例如-r -p是什么意思读取。我是新人,所以它会帮助我学习。谢谢 – stackman

+1

我在答案中添加了解释。 – anubhava