#!/bin/bash
echo 'Want Task 1'
read r1 ;
if [ echo "${r1}" | grep -iq "^y" ] ; then
echo 'Task One Done'
echo 'Want Task 2 ??'
read r101
if [ echo "${r101}" | grep -iq "^y" ] ; then
echo 'Task 2 Done'
fi
fi
当我运行上面的代码时,它给我错误提示
[: 缺少 `]' grep: ]: 没有这样的文件或目录
但是当我简单地省略括号时[
,]
代码就可以完美运行。我知道这[]
是一个测试命令,但我不知道何时使用它,何时不使用它。
另外请澄清我是否应该将其称为[]
“操作员”或test
“命令”
旁注,如有必要,我在 GNOME 终端中使用 Bash。
答案1
答案2
这是对执行相同操作的脚本的另一个建议:
#! /bin/bash
read -p 'Want Task 1 '
if [ "${REPLY^}" = Y ] ; then
echo 'Task One Done'
read -p 'Want Task 2 ?? '
if [ "${REPLY,}" = y ] ; then
echo 'Task 2 Done'
fi
fi
的默认变量read
是$REPLY
.使用的时候${REPLY^}
会得到大写的内容,使用的时候会得到${REPLY,}
小写的内容。由于变量可以为空,因此您需要将"
其引起来。
如果你真的想像这样调用外部程序,grep
可以这样做:
read -p 'Want Task 1 '
if echo $REPLY | grep -icq ^y ; then
echo 'Task 1 Done'
fi
上面实际发生的是,我们运行一个命令,如果退出值不为 0,则为 true。这个例子将展示它:
if /bin/true ; then
echo We have always the yes hat on
fi
并且[
只是一个名为 的程序/usr/bin/test
。在下面查找一下man test
。