• ベストアンサー

exitコマンドの後の変数について(シェル)

シェルをはじめたばかりの初心者です。 以下のようなシェルがあります。exit後のexit_cancelという変数は何に使われるのでしょうか? exitしてしまえばシェルは終了してしまうので exit_cancelという変数は関係ない気もするのですが・・・ ちなみにexit_cancelという変数はシェル内には どこにも定義していません。 どなたか教えて頂けないでしょうか? 何卒よろしくお願い致します。 case "${opt_exec}" in "z") ;;  *)     print -n "本当によろしいですか?[y/n] =>"     read REPLY   if [[ ${REPLY} != "y" ]] then echo "処理を中止します。" exit ${exit_cancel}        fi esac

  • milki
  • お礼率59% (77/129)

質問者が選んだベストアンサー

  • ベストアンサー
  • shige_70
  • ベストアンサー率17% (168/946)
回答No.2

$exit_cancel が未定義であれば、exitの後ろに何も書かなかったのと同じです。 exitは通常、ひとつの数字のパラメータを取ることが出来ます。それは終了コードとして呼び出し元に引き渡されます。指定しなければ 0 が渡されます。 本当に定義されていないかどうかは、画面に表示してみれば分かりますよ。適当な場所に echo ${exit_cancel} と入れてから実行してみましょう。 スクリプトないに定義されていないのに値が入っている場合は、 ・ 環境変数である ・ ソースしたファイルで定義されている のどちらかが考えられます。 ソースというのは、別ファイルを取り込みます。(C言語の #include に相当するものです) . ファイル名 の形式で記述します。 ですから、スクリプトのどこかに、たとえば . xxx.sh というのが書いてあれば、そこで xxx.sh の内容を実行するわけです。もし xxx.sh の中にたとえば exit_cancel=-1 と書いてあったとすれば、元のスクリプトの中でも exit_cancel には -1 が入ることになります。

milki
質問者

お礼

詳しいご解説ありがとうございます。 とっても分かりやすかったです。 全然ポイントをはずしていたようで、 まったく違ったところを調べていました。(とほほ) シェルの調べ方なども分かりました。 本当にありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

bash の man は見ましたか? exit 数値 で「数値」を終了ステータスとするって書いてありますよ. ちなみに.... 「シェルスクリプト」を「シェル」と省略するのはいかがなものかと.

milki
質問者

お礼

exitのmanを見るんですね。 まったくポイントをはずしていました… ご返信ありがとうございました。

関連するQ&A

  • メッセージを求められるシェルを連続実行

    お世話になります。 現在シェルを作成しています。 既に存在するシェル(100個)を順番に実行するシェルを 作成しようとしています。 しかし、その存在するシェルは実行すると、YES/NO  の確認メッセージに答えないと、進まないようになってい ます。 そのため、確認メッセージに中断されて連続で実行できません。 この確認メッセージで止まらずに連続実行する手段は あるのでしょうか? シェルに詳しい方のご教授ねがいます。 ■既に存在するシェルのメッセージ確認の個所 echo $変数 "実行しますか(確認メッセージ?) [N] => \c" read YN echo " " if [ "$YN" != 'Y' -a "$YN" != 'y' ];then echo ' 実行しません' exit 1 fi

  • Kシェルが動作しない。

    Kシェルが動作しない。 以下シェル自体ですが、単体では動作するのですが、メインのシェルから呼び出すと動作しなくなります。 動作しない条件としては、子シェルがメインシェルのwhile文の中に入れていると無限ループ???してしまいます。(for文やそれ以外では動作します。) なにかご存知でしたら、ご教授願います。 ・子シェル(Yes or Noを入力するまで無限ループする) #!/bin/ksh answer= echo "Do you add xxxx ? ---> [y/n]\c" while : do if [ "`echo -n`" = "-n" ]; then echo "$@\c" else echo -n "\@" fi read answer case "${answer}" in [yY] | yes | YES | Yes ) return 0 ;; [nN] | no | NO | No ) return 1 ;; * ) echo "Please enter y or n." ;; esac done ・メインシェル #!/bin/ksh while read line do /xxx/子シェル.ksh done < /xxx/zzz.txt 分かりづらいかも知れませんが、ご容赦願います。

  • Bシェルでパイプ→exitがうまくいかない

    Bシェルで、下記のようにパイプの中でexitすることでスクリプトを終了させようとしたのですが、パイプした処理を抜けるだけexit 1 のところでスクリプトが終了せず、whileループの後のexit 0のところまで行ってスクリプトが終了しました。 パイプの中でexitすると、パイプの外に出るだけになるのでしょうか? どうすれば、パイプの中でスクリプトを終了させることができるのでしょうか? #! /bin/sh cat /tmp/tmp.dat | while read LINE do LL=LINE exit 1 done echo $LINE exit 0 また、これとは別に、変数LLに$LINEを代入して、その後LLをechoすると、$LINEの内容が出ると思ったら、中が空になっているようで何も出力されませんでした。 これを回避して、LLにLINEの内容を保存するような処理をしたいのですが、どうすればいいでしょうか? 以上、よろしくお願いします。

  • シェルスクリプトのテスト

    年が変わるとシェルの処理も替わります。 例えば: year=`date +%Y` if [ $year=2006 ];then echo "year 2006" fi if [ $year=2007 ];then echo "year 2007" fi テストをしたいですが、 2007年のテストは出来ますでしょうか? 教えてください!お願いします。

  • シェルの変数セットについて

    どなたか教えてください。 以下のようなUNIXのシェルを作ってみたのですが変数がうまくセットされません。 これは仕様なんでしょうか??? シェルはkshでシェルの中でsuしているユーザはcshです。 例: ==test.sh== #!/bin/ksh A1="test test" su - user1 <<EOF echo "A1 :" $A1 set A2 =(test test) echo "A2 : " $A2 EOF exit ==実行結果== %./test A1 : test test A2 : %

  • 【シェルスクリプト】 ローカル変数、グローバル変数

    シェルスクリプトのローカル変数、グローバル変数の取り扱いで迷っています。 ---------------- #!/bin/bash count=0 cat file | while read i do count=`expre $count + 1 ` done echo $count ---------------- fileの中身をcatで流して、それを一行ずつ読み込みます。 そのつど、count の値を増やしていくようにしたいのですが、最後の出力値は0となります。 cat→whileで読み込ませて処理している間はローカル変数として扱われているのでしょうか。 またそうであるならば、シェルスクリプトでグローバル変数を明示的に宣言するにはどうのようにすればいいのでしょうか。

  • shell 変数について

    お世話になっております。 たびたびすみません。 shellプログラミングで質問です。 以下のようなプログラムを作成したところ、 引数に2147483648以上の数値を与えて実行すると 変数に代入される値が-マイナスとなり、 おかしくなってしまいます。 シェル変数の上限は2147483647なのでしょうか? だとしたら、これ以上の数値を代入することはできないのでしょうか。 お手数ですが、よろしくお願いいたします。 #!bin/sh firstno=$1 echo "do you make a file?(y/n)" read ans if [ $ans = "y" ]; then sed -e 's/AAA/aaa/' aaa.csv >> aaaaaa.csv firstno=`expr $firstno + 1` echo "next no is \"$firstno\"" fi

  • Linuxのシェルについて

    いつもお世話になっております。 Linux(redhat)でのシェルスクリプトを作成したいと思いますが、あるコマンドを実行して実行成功したか失敗したかをstatusで拾う形にしたのですがうまくいきません。アドバイスをお願いします。 例: #!/bin/sh set ST = $status date ←コマンド if [ $ST == 0 ]; then echo "**************" echo "* o k *" echo "**************" exit $NORMAL else echo "**************" echo "* N G  *" echo "**************" exit $ABEND fi

  • Bシェルで配列を使いたいのですが・・・

    下記のBシェルファイルで、あるテキストファイルの内容を1行ずつ読み込んで、その行を変数に代入し、後続にてその変数を表示するという処理を実現したいのですが、うまくいきません。 どのようにすればうまく行くのかまた、何故うまくいかなかったのかをご教授頂ければと思っております。 宜しくお願い致します。 <Bシェルファイル> #!/bin/sh exec 3<&0 < TBL.txt count=0 while read line do ex$count=$line count=`expr $count + 1` done exec 0<&3 3<&- echo ${ex[1]} exit 0 <結果> aho.sh: ex0=A コマンドが見つかりません。 aho.sh: ex1=B コマンドが見つかりません。 aho.sh: ex2=C コマンドが見つかりません。 aho.sh: 置換が正しくありません

  • [bash]printfコマンドについて

    以下のシェルスクリプトを作成しています。 echo -n "開始> " read START echo -n "終了> " read END echo -n "桁数> " read DIGIT x=$(seq ${START} ${END}) y=$(printf "%06d\n" $x) echo $y 上のとおり、現在は6桁固定になっておりますが、最終的には"桁数"で取得した値となります。 どのように修正したらいいのでしょうか? ご回答をお待ちしております。