13,005
回編集
編集の要約なし |
編集の要約なし |
||
12行目: | 12行目: | ||
<source lang="sh"> | <source lang="sh"> | ||
if type -P python > /dev/null; then | if type -P python > /dev/null; then | ||
echo | echo "python コマンドを使用できます" | ||
else | else | ||
echo | echo "python コマンドが見つかりません" | ||
fi | fi | ||
</source> | </source> | ||
21行目: | 21行目: | ||
条件式を<code>!</code>で反転させていることに注意すること。<br> | 条件式を<code>!</code>で反転させていることに注意すること。<br> | ||
<br> | <br> | ||
また、< | また、<code>echo</code>の出力を<code>>&2</code>とリダイレクトすると、標準エラー出力へ出力できる。<br> | ||
<source lang="sh"> | <source lang="sh"> | ||
if ! type -P python3 > /dev/null; then | if ! type -P python3 > /dev/null; then | ||
30行目: | 30行目: | ||
<br><br> | <br><br> | ||
== | == 外部コマンドの出力と変数 == | ||
<code>ls</code>、<code>grep</code>、<code>find</code>等のコマンドの実行結果を変数に代入するには、以下のように記述する。<br> | <code>ls</code>、<code>grep</code>、<code>find</code>等のコマンドの実行結果を変数に代入するには、以下のように記述する。<br> | ||
変数=$(コマンド) | 変数=$(コマンド) | ||
または | |||
変数=`コマンド` | 変数=`コマンド` | ||
<br> | <br> | ||
49行目: | 49行目: | ||
FILES=`ls` | FILES=`ls` | ||
echo "$FILES" | echo "$FILES" | ||
</source> | |||
<br><br> | |||
== パイプとwhile readコマンド == | |||
<code>find . -name '*.sh'</code>等の外部コマンドの出力結果を1行ずつ処理するには、<code>パイプ</code>で<code>while read</code>コマンドに接続して記述する。<br> | |||
<br> | |||
以下の例では、カレントディレクトリ下の.shファイルを再帰的に列挙している。<br> | |||
<source lang="sh"> | |||
find . -name '*.sh' | while read SHFILE; do | |||
echo "$SHFILE" | |||
done | |||
</source> | |||
<br><br> | |||
== 外部コマンドの出力と配列 == | |||
パイプを使用せず、<code>`コマンド名`</code>または<code>$(コマンド名)</code>で実行した外部コマンドの出力を、配列で受け取る方法もある。<br> | |||
<br> | |||
forループのinの後の変数(以下の例では、変数SHFILES)には、スペース区切りで各要素が列挙される。<br> | |||
変数SHFILESの値にスペースが含まれる場合、行を1つの要素として処理するためには、変数をダブルクォーテーションで囲む必要がある。<br> | |||
<source lang="sh"> | |||
SHFILES=$(find . -name '*.sh') | |||
for SHFILE in "$SHFILES"; do | |||
echo "$SHFILE" | |||
done | |||
</source> | </source> | ||
<br><br> | <br><br> |