检测空白文本的bash if语句

检测空白文本的bash if语句,bash,shell,unix,Bash,Shell,Unix,您好,我目前正在尝试在shell脚本中生成if语句,以检测用户是否没有输入任何文本 我想如果用户没有输入任何东西,或者他们输入的内容无效,在他们输入正确内容之前进行回音和提醒 这是我到目前为止所拥有的 echo "Current Address books " ls -R |grep .txt echo "--------------------------------------------------------------------" ec

您好,我目前正在尝试在shell脚本中生成if语句,以检测用户是否没有输入任何文本

我想如果用户没有输入任何东西,或者他们输入的内容无效,在他们输入正确内容之前进行回音和提醒

这是我到目前为止所拥有的

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”${@#./}“
打印位置参数,每行一个,前导
/
已删除。感谢这是一个复杂但完美的解决方案