<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9</id>
	<title>シェルスクリプトの基礎 - 終了ステータス - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9&amp;action=history"/>
	<updated>2026-07-15T18:37:57Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9&amp;diff=11489&amp;oldid=prev</id>
		<title>Wiki: 文字列「__FORCETOC__」を「{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9&amp;diff=11489&amp;oldid=prev"/>
		<updated>2024-10-14T01:38:31Z</updated>

		<summary type="html">&lt;p&gt;文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年10月14日 (月) 10:38時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l163&quot;&gt;163行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;163行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  0 1 2&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  0 1 2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{#seo:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__FORCETOC__&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__FORCETOC__&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[カテゴリ:シェルスクリプト]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[カテゴリ:シェルスクリプト]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9&amp;diff=2626&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == コマンド終了時には、終了ステータスと呼ばれるコマンドの成否を表す数値が特殊変数&lt;code&gt;$?&lt;/code&gt;に自動で設定され…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9&amp;diff=2626&amp;oldid=prev"/>
		<updated>2020-12-19T18:28:19Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == コマンド終了時には、終了ステータスと呼ばれるコマンドの成否を表す数値が特殊変数&amp;lt;code&amp;gt;$?&amp;lt;/code&amp;gt;に自動で設定され…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
コマンド終了時には、終了ステータスと呼ばれるコマンドの成否を表す数値が特殊変数&amp;lt;code&amp;gt;$?&amp;lt;/code&amp;gt;に自動で設定される。&amp;lt;br&amp;gt;&lt;br /&gt;
各コマンドにより異なるが、コマンド成功時は0、失敗時は1(コマンドやエラーの種類によっては0以外)が設定される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
直前に実行したコマンドの成否は、以下のように、特殊変数$?に設定されている値で確認できる。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;コマンド&amp;gt;&lt;br /&gt;
 echo $?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 終了ステータスの設定 ==&lt;br /&gt;
シェルスクリプトでは、exitコマンドに指定したパラメータ(0または1～255の正の整数)が終了ステータスとなる。&amp;lt;br&amp;gt;&lt;br /&gt;
正常に終了した時は&amp;lt;code&amp;gt;exit 0&amp;lt;/code&amp;gt;、異常終了時は&amp;lt;code&amp;gt;exit 1&amp;lt;/code&amp;gt;で終了することが慣例である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
関数も同様に、returnコマンドに指定したパラメータが終了ステータスとなる。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
 exit &amp;lt;数値&amp;gt;&lt;br /&gt;
 return &amp;lt;数値&amp;gt;&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
exitコマンドやreturnコマンドに終了ステータスを指定することで、任意の終了ステータスでシェルスクリプトおよび関数を終了することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
exitコマンドは省略可能であるが、省略する場合は、シェルスクリプト内で最後に実行したコマンドの終了ステータスが、&amp;lt;br&amp;gt;&lt;br /&gt;
シェルスクリプトの終了ステータスとなる。&amp;lt;br&amp;gt;&lt;br /&gt;
また、returnコマンドも同様となる。&amp;lt;br&amp;gt;&lt;br /&gt;
 cat &amp;lt;存在しないファイル名&amp;gt;  # catコマンドが失敗する場合、終了ステータスは1となる&lt;br /&gt;
 echo $?&lt;br /&gt;
 &lt;br /&gt;
 # 出力&lt;br /&gt;
 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 touch &amp;lt;新規ファイル名&amp;gt;  # catコマンドが成功する場合、終了ステータスが0となる&lt;br /&gt;
 cat &amp;lt;新規ファイル名&amp;gt;&lt;br /&gt;
 echo $?&lt;br /&gt;
 &lt;br /&gt;
 # 出力&lt;br /&gt;
 0&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例では、exitコマンドを使用して終了ステータスを設定している。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 # カレントディレクトリにあるfooディレクトリの存在を確認&lt;br /&gt;
 if [ -d ./foo ]; then&lt;br /&gt;
    echo &amp;quot;ディレクトリが存在する&amp;quot;&lt;br /&gt;
    exit 0&lt;br /&gt;
 else&lt;br /&gt;
    echo &amp;quot;ディレクトリが存在しない&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 # 出力&lt;br /&gt;
 # ファイルが存在する場合&lt;br /&gt;
 echo $?&lt;br /&gt;
 0&lt;br /&gt;
 &lt;br /&gt;
 # ディレクトリが存在しない場合&lt;br /&gt;
 echo $?&lt;br /&gt;
 1&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 終了ステータスを判定してコマンドを実行する ==&lt;br /&gt;
==== コマンドが成功した場合のみ次のコマンドを実行する ====&lt;br /&gt;
以下のように、&amp;amp;&amp;amp;でコマンドを繋ぐ場合、直前のコマンドが成功した場合のみ、次のコマンドが実行される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
コマンドが&amp;amp;&amp;amp;で結合される場合、シェルはcommand1の終了ステータスを判断して、0(成功)である場合のみcommand2を実行する。&amp;lt;br&amp;gt;&lt;br /&gt;
さらに、複数のコマンドが結合される場合も、直前のコマンドが成功した場合のみ、次のコマンドが実行される。&amp;lt;br&amp;gt;&lt;br /&gt;
 command1 &amp;amp;&amp;amp; command2&lt;br /&gt;
 command1 &amp;amp;&amp;amp; command2 &amp;amp;&amp;amp; command3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
直前のコマンドが失敗していると困る処理において、&amp;amp;&amp;amp;を使用する場合、直前のコマンドが成功していることが保証されるため、&amp;lt;br&amp;gt;&lt;br /&gt;
連続して2つのコマンドを実行するよりも確実性の高い処理になる。&amp;lt;br&amp;gt;&lt;br /&gt;
 ls hogehoge &amp;amp;&amp;amp; echo &amp;quot;exists.&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== コマンドが失敗した場合のみ次のコマンドを実行する ====&lt;br /&gt;
以下のように、||でコマンドを繋ぐ場合、直前のコマンドが失敗した場合のみ、次のコマンドが実行される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
コマンドが||で結合されると場合、シェルはcommand1の終了ステータスを判断して、0以外(失敗)であった場合のみcommand2を実行する。&amp;lt;br&amp;gt;&lt;br /&gt;
さらに、複数のコマンドが結合される場合も、直前のコマンドが失敗した場合のみ、次のコマンドが実行される。&amp;lt;br&amp;gt;&lt;br /&gt;
 command1 || command2&lt;br /&gt;
 command1 || command2 || command3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
command1が失敗した場合のみcommand2を試すといった処理を行う場合、この||を使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
 ls fugafuga 2&amp;gt;/dev/null || echo &amp;quot;not exists.&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====  &amp;lt;code&amp;gt;rm -f&amp;lt;/code&amp;gt;の終了ステータス ====&lt;br /&gt;
&amp;lt;code&amp;gt;rm -f&amp;lt;/code&amp;gt;コマンド(強制削除)の終了ステータスは、&amp;lt;u&amp;gt;常に0となるため&amp;lt;/u&amp;gt;、&amp;amp;&amp;amp;または||を使用してコマンドを連結しても期待する結果にはならない。&amp;lt;br&amp;gt;&lt;br /&gt;
例えば、ファイルを削除できなかった場合のみ、あるコマンドを実行するといった処理は、終了ステータスの判定ではできない。&amp;lt;br&amp;gt;&lt;br /&gt;
 # -fオプションを付加して実行する場合、ファイルが存在しなくともrmコマンドは成功する&lt;br /&gt;
 # ただし、rm -fを使用する場合でも、/tmp等のスティッキービットが設定されているディレクトリで、&lt;br /&gt;
 # 他のユーザのファイルを削除しようとした場合には、終了ステータスが1となる。&lt;br /&gt;
 rm -f foo&lt;br /&gt;
 echo $?&lt;br /&gt;
 0&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
このように、&amp;lt;code&amp;gt;rm -f&amp;lt;/code&amp;gt;の終了ステータスは判断が難しいため、強制削除の終了ステータス判定処理は避けること。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 終了ステータスの応用 ==&lt;br /&gt;
==== 入力値の判別(数値または文字列) ====&lt;br /&gt;
キーボードから入力する値が、数値または文字列かを判別する場合、exprコマンドとその終了ステータスを使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
exprコマンド(四則演算などに使用するコマンド)は、以下のような終了ステータスである。&amp;lt;br&amp;gt;&lt;br /&gt;
* 数値同士で演算を行った場合は、0&lt;br /&gt;
* 数値同士でも計算結果が0になる場合は、1&lt;br /&gt;
* 数値以外で演算を行った場合(計算できない場合)は、2以上&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
つまり、数値とキーボードからの入力値をexprコマンドで演算を行い、&amp;lt;br&amp;gt;&lt;br /&gt;
終了ステータスが0または1ならば入力値は数値、2以上ならば入力値は数値以外の文字列と判断することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例では、exprコマンドと終了ステータスを使用して入力値の判定を行っている。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 # キーボードから入力(-n を付けると改行なしで出力する)&lt;br /&gt;
 read -p &amp;quot;数字を入力してください &amp;gt; &amp;quot; KEY&lt;br /&gt;
 &lt;br /&gt;
 # 入力値に1を加算して、その終了ステータスを判定する&lt;br /&gt;
 expr 1 + $KEY &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 case $? in&lt;br /&gt;
    0 | 1) echo &amp;quot;[\$?=$?] 数字が入力されました &amp;gt; $KEY&amp;quot; ;;&lt;br /&gt;
    *) echo &amp;quot;[\$?=$?] 数字以外が入力されました &amp;gt; $KEY&amp;quot; ;;&lt;br /&gt;
 esac&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
上記のシェルスクリプトの実行結果は、以下の通りとなる。&amp;lt;br&amp;gt;&lt;br /&gt;
 数字を入力してください &amp;gt;1&lt;br /&gt;
 [$?=0] 数字が入力されました &amp;gt;1&lt;br /&gt;
 #↑expr コマンドが成功するので、終了ステータスは「0」になる。&lt;br /&gt;
&lt;br /&gt;
$ ./input_check.sh&lt;br /&gt;
数字を入力してください &amp;gt;-1&lt;br /&gt;
[$?=1] 数字が入力されました &amp;gt;-1&lt;br /&gt;
#↑expr コマンドは成功するが計算結果が0となるので、終了ステータスは「1」になる。&lt;br /&gt;
&lt;br /&gt;
$ ./input_check.sh&lt;br /&gt;
数字を入力してください &amp;gt;hoge&lt;br /&gt;
[$?=3] 数字以外が入力されました &amp;gt;hoge&lt;br /&gt;
#↑計算できないため expr コマンドが失敗し、終了ステータスは「3」になる。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== パイプ処理の終了ステータスの取得 ====&lt;br /&gt;
パイプ処理を行う場合、特殊変数$?に設定される値は、パイプ処理の最後に実行するコマンドの終了ステータスとなる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下のような例を考える。&amp;lt;br&amp;gt;&lt;br /&gt;
 exit 0 | exit 1 | exit 2&lt;br /&gt;
 echo $?&lt;br /&gt;
 &lt;br /&gt;
 # 出力&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
この時、最後のコマンドの終了ステータスではなく、パイプ処理の先頭または途中で実行するコマンドの終了ステータスを取得したい場合がある。&amp;lt;br&amp;gt;&lt;br /&gt;
この場合、特殊変数$PIPESTATUS(配列)を参照することで、パイプ処理にて実行された各コマンドの終了ステータスを取得することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;(ただし、bashのみ)&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例では、全要素(全終了ステータス)を参照しているが、個別に参照することもできる。&amp;lt;br&amp;gt;&lt;br /&gt;
詳細は、[[シェルスクリプトの基礎 - 配列]]を参照すること。&amp;lt;br&amp;gt;&lt;br /&gt;
 exit 0 | exit 1 | exit 2&lt;br /&gt;
 echo ${PIPESTATUS[@]}  # $PIPESTATUS配列において、@を指定して全要素を出力している&lt;br /&gt;
 &lt;br /&gt;
 # 出力&lt;br /&gt;
 0 1 2&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:シェルスクリプト]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>