1

ファイルからパターンを検索し、そのファイルで見つかった行と各行の番号を出力するスクリプトを作成します。

私はスクリプトを次のように持っています

#!/bin/bash

echo "------ File =" $2 "------"
grep -ne $1 $2

問題なく動作しますが、今は検証が必要です。私が欲しいのは書き方だけです

if [[ number of arguments <2 ]]; then
echo "Must enter two arguments"

そしてまた何か

if [[ $2 is not a file/directory]]; then
echo "second arguemnt needs to be a file/directory"

いつものように、たくさんの愛。

4

3 に答える 3

3

質問 1 の場合:

if [[ number of arguments <2 ]]; then
echo "Must enter two arguments"

できるよ:

if [[ $# -ne 2 ]]
then
  echo "Usage: You must enter two arguments"
  exit -1
fi

質問 2 の場合:

if [[ $2 is not a file/directory]]; then
echo "second arguemnt needs to be a file/directory"

できるよ:

if [[ ! -e $2 ]]
then
    echo "File does not exist!"
    exit -2
fi
于 2013-06-20T16:46:25.367 に答える
0

スクリプトが壊れるまで問題なく動作します。ファイル名や引数にスペースやその他のおかしな記号を入力すると、おかしな驚きがあります。

#!/bin/bash

printf -- "------ File = %s ------\n" "$2"
grep -ne -- "$1" "$2"

すでにはるかに優れています(引用を観察し、学び、より多くの引用を使用してください!)。テストに関しては、ソリューションに非常に近づいています!

引数の数については、変数を使用してシェル演算を使用します。特別なパラメーターのリストを$#参照してください。

if (( $# != 2 )); then
    echo >&2 "Must enter two arguments you dumbo"
    exit 1
fi

ファイルまたはディレクトリをテストするには、条件式を使用します

if [[ ! -e $2 ]]; then 
    echo >&2 "second argument needs to be a file/directory you dumbo"
    exit 1
fi
于 2013-06-20T16:49:44.660 に答える
0

引数の数については、$#

if [ $# -lt 2 ]
then
  echo "Too few args"
fi

次に、 testを見てください。-dディレクトリや-f 通常のファイルなど、あらゆる種類のテストを行うことができ ます。チェックできるシンボリックリンクや名前付きパイプなど、あらゆる種類のものがあります。

于 2013-06-20T16:46:18.183 に答える