- ベストアンサー
Bシェルでのif文について
あるファイルからgrepコマンドで抽出し、その値を変数に 入れてその値がNULLが確認したいのですが、うまくいきません。 どのようにすればNULLとして比較できますでしょうか。 ・「File」という名のファイル Period: Count: ※本来ならば「:」の後に数字が入るが 入っていない場合にはエラーとしたい ・grepの条件 TEST=`grep "^Period" File | cut -f 2 -d":"` ・if文 if [ ${TEST} != NULL ] then echo "ERROR" fi
- question0523
- お礼率15% (13/84)
- その他(プログラミング・開発)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
NULLというのはC言語などでの話で、シェルスクリプトでは空文字列("")かどうかの比較になります。 そういういみでは、 test [ -z "$TEST" ] です。 実際にはgrepの終了コードで分岐すれば楽です。 :の後ろに空白が入っても駄目で、イキナリ数字と言うことでしょうか? 「数字以外の文字が入っていたらエラー」という処理が要らないのなら、 「Period:で行末が来てたらエラー」という処理になるので以下のコードで良いと思いますが。 if grep -q '^Period:$' File ;then echo error fi OSによっては、grep -q ではなくてgrep -sにしないといけないことがあります。 数字以外の文字があるのもエラーにしたければ、egrepをつかって、こうなるかな> if egrep -q '^Period:([^0-9]|$)' File ;then
関連するQ&A
- シェルスクリプト(if文)
bashにてシェルスクリプトを作成しています。 XXXX_111122222333_YYYYMMDD 111122222333 といった2パターンのファイル名から、「111122222333」の部分を取得したいのですが、if文の条件式で悩んでいます。 if [ expr length ${p9} -gt 13 ] then a=`echo $p9|cut -c 6-9` b=`echo $p9|cut -c 10-14` c=`echo $p9|cut -c 15-18` else a=`echo $p9|cut -c 1-4` b=`echo $p9|cut -c 5-9` c=`echo $p9|cut -c 10-13` fi これで実行すると too many arguments というエラーが出てしまいます。(結果も正しくありません) 基本的な部分が理解できていないかと思うのですが、宜しくお願いいたします。
- ベストアンサー
- Solaris系OS
- シェルのif文について
シェルの書き方で悩んでいます。 A,Bファイルにいずれかが読み取れない場合に、エラーにする if [ -r "A" -a -r "B" ] then else echo "エラー" fi 悩んでるところ→[ -r "A" -a -r "B" ]の否定は、どのようにかくのでしょうか? よろしく御願いします
- ベストアンサー
- Linux系OS
- Bシェルのif文
if文の否定について教えてください。 if $aa='xxx' then else echo yyy fi 間違っているかもしれませんが上に書いたことをやろうとしています。 他の言語の if(!($aa='xxx'))echo yyy; をBシェルのif文で書くにはどうしたらいいですか? $aa='xxx'を$aa!='xxx'にするのではなくて、その外側のifの書式を教えてください。 最初に書いたコードでは、if(!条件)を知らないので if(条件) else 処理 endif のように書きました。
- 締切済み
- その他(プログラミング・開発)
- BシェルのIF文について。。
BシェルのIF文について。。 現在、Bシェルで特定のファイルが存在する場合、ファイル名の末尾をカウントアップ(ファイル名_01)しようと考えております。 以下がスクリプトの内容なのですが fiが無効というエラーが出てしまいます。。。 対応が分かる方がいらっしゃれば教えてください。。 if [ -f aaa_00.txt] then touch aaa_001.txt fi よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- kshでのNULLの比較
以下のスクリプトを作成し、変数に格納された値がNULLか調べたいと思っていますが、エラーが出力されてしまいます。 ■スクリプトの中身 #!/usr/bin/ksh HOGE="" if [ ${HOGE} != "" ]; then echo "${HOGE}" fi if [ -n ${HOGE} ]; then echo "${HOGE}" fi ■エラー + HOGE= + [ != ] hoge[5]: test: 0403-004 このコマンドにはパラメーターを指定してください。 + [ -n ] hoge[8]: test: 0403-004 このコマンドにはパラメーターを指定してください。 変数の中身がnullの場合、どのような比較条件を記述すればよいのでしょうか?
- 締切済み
- その他(プログラミング・開発)
- シェルスクリプトのif文
シェルスクリプトのif文について質問です。 あるファイルが存在しないときだけ処理を行いたい場合、 下記のような記述をするしかないのでしょうか? if [ -e /tmp/test.txt ]; then ダミー処理(val1=1など意味のない処理) (ダミー処理を入れるのは何も書かないとエラーとなってしまうため) else 行いたい処理 fi elseを使わずに if fi だけですますことはできないでしょうか? -eはファイルが存在するならば真なので 逆に意味が真となるようにしたいのですが・・・
- ベストアンサー
- その他(プログラミング・開発)
- シェルスクリプトの if文について
if文でずっと悩んでいます。 testIF.shというファイル名で作成したif文を実行したのですが、(kシェル) 「./testIF.sh[3]: testCount: 見つかりません。」 作成したif文は↓です。 ---------------------------------------- let testCount=0 if ( testCount > 0 ) ; then echo "OK!!" fi exit ---------------------------------------- 何がいけないのでしょうか。 まったく分かりません。
- ベストアンサー
- その他(プログラミング・開発)
- if文の質問です
初心者です。 よろしくお願いします。 aaaという文字を売ったときにだけtrueを表示したいのですが、うまくいきません。 以下の<結果>のようになってしまいます。 どうしたらうまくいくのか例文を探しても載っていなかったので質問しました。 if [ $1 = "aaa" ] ; then echo true ; else echo false ; fi <結果> $ ./test.txt aaa ./test.txt: line 7: syntax error near unexpected token `fi' ./test.txt: line 7: `fi'
- ベストアンサー
- SE・インフラ・Webエンジニア
- シェルスクリプト文字列の処理について
はじめましてよろしくお願いします。 質問サイトもシェルも初心者なので至らない点がございましたら ご容赦の程よろしくお願いします。 下記シェルスクリプトを実行すると下記エラーが発生します。 「test2」変数に空白無しで「abc」と入力するとエラーは発生しません。 変数test2の値(a bc)を変更せずにエラーが発生しない方法はないでしょうか? 手段でもかまいませんので教えてください。 ========================= testsh110207.sh ====================================== #!/bin/sh test1="abc" test2="a bc" if [ ${test1} = ${test2} ] then echo "=:文字列1と文字列2が等しい場合に真" echo "test1の「${test1}」と、test2の「${test2}」は等しい" fi if [ ${test1} != ${test2} ] then echo "!=:数値1と数値2が等しくない場合に真" echo "test1の「${test1}」と、test2の「${test2}」は等しくない" fi echo "********* テスト完了 *********" ======================================================================= $ ./testsh110207.sh ./testsh110207.sh: line 6: [: too many arguments ./testsh110207.sh: line 13: [: too many arguments ********* テスト完了 *********
- ベストアンサー
- Linux系OS
- 正規表現 Bシェル
Bシェルの正規表現を教えてください。 ある文字列の中に英数大文字、小文字、コンマ、ピリオド、アンダーバー、ハイフン以外が含まれていないかをチェックしたいです。以下のようにすると文字列LINEの先頭にあるとチェックできるのに、中にあると出来ません。教えてください。 if expr \"$LINE\" : [^a-zA-Z0-9\\,\\.\\_\\-] >/dev/null ; then echo \"チェックNG 使用不可能な文字が入っています。 ${LINE}\" >> ${LOG_FILE} else echo \"チェックOK ${LINE}\" >> ${LOG_FILE} fi
- ベストアンサー
- その他(プログラミング・開発)
お礼
ご回答ありがとうございます。 とても参考になりました。