0

inputLineNumberの値を 20 に設定したいです。 [[-z "$inputLineNumber"]]でユーザーから値が指定されていないかどうかを確認し、 inputLineNumber=20で値を設定してみました。コードは、このメッセージ./t.sh: [-z: not found as message on console. これを解決するには?これも私の完全なスクリプトです。

#!/bin/sh
cat /dev/null>copy.txt
echo "Please enter the sentence you want to search:"
read "inputVar"
echo "Please enter the name of the file in which you want to search:"
read "inputFileName"
echo "Please enter the number of lines you want to copy:"
read "inputLineNumber"
[[-z "$inputLineNumber"]] || inputLineNumber=20
for N in `grep -n $inputVar $inputFileName | cut -d ":" -f1`
do
  LIMIT=`expr $N + $inputLineNumber`
  sed -n $N,${LIMIT}p $inputFileName >> copy.txt
  echo "-----------------------" >> copy.txt
done
cat copy.txt

@Kevin からの提案の後、スクリプトを変更しました。エラーメッセージ./t.sh: syntax error at line 11: `$' unexpected

#!/bin/sh
truncate copy.txt
echo "Please enter the sentence you want to search:"
read inputVar
echo "Please enter the name of the file in which you want to search:"
read inputFileName
echo Please enter the number of lines you want to copy:
read inputLineNumber
[ -z "$inputLineNumber" ] || inputLineNumber=20

for N in $(grep -n $inputVar $inputFileName | cut -d ":" -f1)
do
  LIMIT=$((N+inputLineNumber))
  sed -n $N,${LIMIT}p $inputFileName >> copy.txt
  echo "-----------------------" >> copy.txt
done
cat copy.txt
4

2 に答える 2

0

どこから始めれば...

として実行していますが/bin/sh、使用しようとしています[[。認識しない[[bashコマンドです。shシバンを/bin/bash(推奨)に変更するか、[代わりに使用してください。

の間にスペースはありません[[-z。これにより、bash はそれを という名前のコマンドとして読み取りますが[[-z、これは明らかに存在しません。必要です[[ -z $inputLineNumber ]](末尾のスペースにも注意してください)。内での引用[[は問題ではありませんが、[(上記を参照) に変更する場合は、引用を保持する必要があります。

あなたのコードは言う[[-zが、あなたのエラーは言う[-z. 一つを選ぶ。

$(...)の代わりに使用し`...`ます。バッククォートは非推奨であり$()、引用を適切に処理します。

する必要はありませんcat /dev/null >copy.txt。確かに、間に書き込むことなく2回はありません。truncate copy.txtまたは単にプレーンを使用し>copy.txtます。

一貫性のない引用をしているようです。\x特殊文字 ( ~, `, !, #, $, &, *, ^, (), [], \, <, >, ?, ', ", ;) または空白、および空白を含む可能性のある変数を含むものはすべて引用またはエスケープ ( ) します。特殊文字を含まない文字列リテラルを引用符で囲む必要はありません (例: ":")。

の代わりにLIMIT=`expr...`、 を使用しますlimit=$((N+inputLineNumber))

于 2013-10-31T03:53:10.417 に答える