如何在bash shell中查找键盘的用户输入?我以为这会起作用,
int b;
scanf("%d", &b);
但它说
-bash:/Users/[name]/.bash_profile:第17行:意外令牌附近的语法错误`“%d”,'
-bash:/Users/[name]/.bash_profile:line 17:`scanf(“%d”,& b);'
修改
backdoor() {
printf "\nAccess backdoor Mr. Fletcher?\n\n"
read -r b
if (( b == 1 )) ; then
printf "\nAccessing backdoor...\n\n"
fi
}
答案 0 :(得分:7)
只需使用read
内置:
read -r b
不需要指定类型(根据%d
),因为变量不会在shell脚本中输入,除非你跳过(不必要的)箍来制作它们;如果你想把一个值用作小数,那就是它所评估的上下文的问题,而不是它读取或存储的方式。
例如:
(( b == 1 ))
...将$b
视为小数,而
[[ $b = 1 ]]
...在b和"1"
之间执行字符串比较。
答案 1 :(得分:2)
虽然您可以在Bash中将变量声明为整数,但结果将无法达到预期效果。非整数值将转换为零,这可能不是您想要的。这是一种更加防弹的方法来确保您收集整数:
while read -p "Enter integer: " integer; do
[[ "$integer" =~ [[:digit:]]+ ]] && break
echo "Not an integer: $integer" >&2
done
当您想要通知用户为什么某个值被拒绝时,这非常有用,而不仅仅是重新提示。
答案 2 :(得分:0)
您正尝试将类C语法与Bash语法混合使用。
backdoor() {
printf '\n%s\n\n' 'Access backdoor Mr. Fletcher?'
read -r b
if ((b == 1))
then
printf '\n%s\n\n' 'Accessing backdoor...'
fi
}