一部の文字列を読み取る必要がある小さなスクリプトを作成しています。
#!/bin/bash
echo "Enter SUID: "
read $uid
echo "Enter Tag Number: "
read $dicomTag
dicomDump() {
arg1=$1
cd ~/export/"$1"
dcmdump *.dcm > dcmResults.txt
}
tagFinder() {
arg1=$1
arg2=$2
for i in $(cat ~/export/"$1"/dcmResults.txt); do grep "$2" | >> tagResults.txt
break
done;
}
dicomDump "$uid"
#tagFinder "$uid" "$dicomTag"
最初に目立つのは、 dicomDump() 関数ではディレクトリを変更しないことです。ls
コードがまだ残っている間にコードにアクセスしたときに気づいたもう1つのことpwd
は、dcmdump(私のサーバー上のプログラムへのシンボリックリンク、ここで*はワイルドカード)を使用しようとしていることです。スクリプトを実行するたびに、次のようになります。
E: dcmdump: No such file or directory: reading file: *.dcm
スクリプトがディレクトリを元に変更しない理由と、dcmdumpプログラムを実行させる方法を教えてください。
答え1
あなたはread
それを間違って使用しました。
echo "Enter SUID: "
read $uid
echo "Enter Tag Number: "
read $dicomTag
しなければならない
echo "Enter SUID: "
read uid
echo "Enter Tag Number: "
read dicomTag
実際には、read
変数 "uid"を空の文字列に拡張する "$uid"引数を使用して呼び出してから(まだ設定されていないため)、シェルはその単語を引数リストからread
そのまま削除します。空で引用されていません。これにより、read
変数名を指定せずに応答を保存せずにフォームを呼び出すことができます$REPLY
。