如何防止用户在bash脚本中输入任何内容

时间:2013-08-21 23:53:08

标签: linux bash

我有一个程序会接受用户输入字符串并相应地创建输出文件,例如“./bashexample2 J40087”这将为包含字符串J40087的文件夹中的所有文件创建输出文件。一个问题是如果用户没有在输入字符串中输入任何内容,它将为包含文件夹内的每个文件生成输出文件。有没有办法阻止用户在输入字符串中输入任何内容?或者也许吐出某种警告说“请输入一个输入字符串”。

#Please follow the following example as input: xl-irv-05{kmoslehp}312: ./bashexample2    J40087

#!/bin/bash

directory=$(cd `dirname .` && pwd) ##declaring current path
tag=$1 ##declaring argument which is the user input string

echo find: $tag on $directory ##output input string in current directory.

find $directory . -maxdepth 0 -type f -exec grep -sl "$tag"  {} \; ##this finds the string the user requested 
for files in "$directory"/*"$tag"* ##for all the files with input string name...
do
    if [[ $files == *.std ]]; then ##if files have .std extensions convert them to .sum files...
            /projects/OPSLIB/BCMTOOLS/sumfmt_linux < "$files" > "${files}.sum"
    fi

    if [[ $files == *.txt ]]; then  ## if files have .txt extensions grep all fails and convert them..
        egrep "device|Device|\(F\)" "$files" > "${files}.fail"
        fi
        echo $files ##print all files that we found
done

2 个答案:

答案 0 :(得分:3)

我会做这样的事情:

tag=$1

if [ -z "$tag" ]; then
  echo "Please supply a string"
  exit 1
fi

答案 1 :(得分:0)

您可以使用$#来了解已将多少个参数作为参数传递,然后询问是否至少有一个参数。

例如

if [ $# -gt 0 ]; then
    ... your logic here ...

相比之下,您可以使用$ 1读取传递给脚本的第一个参数,第二个参数传递$ 2,依此类推。

希望有所帮助。