嗨,我是bash的新手所以请原谅我,如果我有一个非常愚蠢/容易的问题。我正在编写一个脚本,允许用户更改其区域(无线)。我想要做的是检查到位,所以如果他们输入的值不正确,它会再次提示输入该区域。我想通过检查命令sudo iw reg set $reg
的输出来做到这一点,如果它是正确的输入,则没有输出。但如果输入错误,则会显示错误消息。我试图这样做,但我得到一个错误:
#!/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
提前致谢
答案 0 :(得分:3)
您可以在read
循环中使用while
:
while read -r -p "Please set a valid region: " reg; do
[[ -z "$(sudo iw reg set $reg)" ]] && break
done
help read
给出了这个:
-r
不允许反斜杠转义任何字符-p prompt
输出字符串PROMPT,之前没有尾随换行符
试图阅读$(...)
是command substitution来执行命令并返回输出-z
命令的输出)为空时,true
返回iw
答案 1 :(得分:2)
您可以使用-z
测试,在Bash中输入help test
了解详情(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,因此任何文件描述符的输出都将被视为失败。