检测空白文本的bash if语句
您好,我目前正在尝试在shell脚本中生成if语句,以检测用户是否没有输入任何文本 我想如果用户没有输入任何东西,或者他们输入的内容无效,在他们输入正确内容之前进行回音和提醒 这是我到目前为止所拥有的检测空白文本的bash if语句,bash,shell,unix,Bash,Shell,Unix,您好,我目前正在尝试在shell脚本中生成if语句,以检测用户是否没有输入任何文本 我想如果用户没有输入任何东西,或者他们输入的内容无效,在他们输入正确内容之前进行回音和提醒 这是我到目前为止所拥有的 echo "Current Address books " ls -R |grep .txt echo "--------------------------------------------------------------------" ec
echo "Current Address books "
ls -R |grep .txt
echo "--------------------------------------------------------------------"
echo -n "Please Enter the file you want to search in: "
read fileName
book=$fileName
if [ $fileName == "" ]
then
echo "Please Enter some Text "
else
echo -n "Please Enter a name: "
read search
grep -i $search $fileName
if grep -q "$search" "$fileName";
then
echo "Found!"
else
echo "Not Found!"
fi
fi
您可以使用-z“$var”
表示法:
if [ -z "$fileName" ]; then
echo "Please Enter some Text "
else
read -p "Please Enter a name: " search
fi
检查字符串长度是否为零
或者,您可以使用带引号的变量名执行此检查:
if [ "$fileName" == "" ]; then
echo "Please Enter some Text "
else
read -p "Please Enter a name: " search
fi
您可以使用控制回路
until [ $fileName != "" ]; do
echo "Please Enter some Text " ;
read -p "Please Enter a name: " fileName ;
done
像这样的
#!/bin/bash
echo "Current Address books "
find -name '*.txt' -type f -exec bash -c 'printf "%s\n" "${@#./}"' _ {} + # Don't parse the output of ls
printf -v spacesep "%68s"; printf '%s\n' "${spacesep// /-}"
fileName=
while [[ -z $fileName ]]; do
read -rep "Please Enter the file you want to search in: " fileName
book=$fileName # Is this variable used?
# Check that the file is really a file
if [[ -n $fileName ]] && [[ ! -f $fileName ]]; then
echo "Not a file, try again"
fileName=
fi
done
search=
while [[ -z $search ]]; do
read -rep "Please Enter a name: " search
grep -i -- "$search" "$fileName"
done
if grep -qi -- "$search" "$fileName"; then
echo "Found!"
else
echo "Not Found!"
fi
奖金。使用
-e
切换到读取
您就拥有了读取行编辑功能和文件的制表符完成功能。哇 你能解释一下“printf”%s\n“${@#./}”对我有什么作用吗?@user258030如果没有它,find
的输出将在每个文件名前面有前导的/
。代码段“${@#./}”扩展到所有位置参数,删除了前导的/
。因此,printf“%s\n”${@#./}“
打印位置参数,每行一个,前导/
已删除。感谢这是一个复杂但完美的解决方案