「シェルスクリプトの基礎 - 外部コマンド」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

編集の要約なし
編集の要約なし
10行目: 10行目:
<br>
<br>
そのまま実行すると<コマンド名のフルパスが出力されるので、/dev/nullデバイスへリダイレクトして、出力を抑制している。<br>
そのまま実行すると<コマンド名のフルパスが出力されるので、/dev/nullデバイスへリダイレクトして、出力を抑制している。<br>
  <source lang="sh">
  <syntaxhighlight lang="sh">
  if type -P python > /dev/null; then
  if type -P python > /dev/null; then
     echo "python コマンドを使用できます"
     echo "python コマンドを使用できます"
16行目: 16行目:
     echo "python コマンドが見つかりません"
     echo "python コマンドが見つかりません"
  fi
  fi
  </source>
  </syntaxhighlight>
<br>
<br>
また、指定した外部コマンドが使用できない場合、シェルスクリプトを終了させるには、以下のように記述すればよい。<br>
また、指定した外部コマンドが使用できない場合、シェルスクリプトを終了させるには、以下のように記述すればよい。<br>
22行目: 22行目:
<br>
<br>
また、<code>echo</code>の出力を<code>>&2</code>とリダイレクトすると、標準エラー出力へ出力できる。<br>
また、<code>echo</code>の出力を<code>>&2</code>とリダイレクトすると、標準エラー出力へ出力できる。<br>
  <source lang="sh">
  <syntaxhighlight lang="sh">
  if ! type -P python3 > /dev/null; then
  if ! type -P python3 > /dev/null; then
     echo 'This script requires Python 3. Please install Python 3 first and try again.' >&2
     echo 'This script requires Python 3. Please install Python 3 first and try again.' >&2
     exit -1
     exit -1
  fi
  fi
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


37行目: 37行目:
<br>
<br>
以下の例では、lsコマンドの実行結果を変数FILESに代入して、echoで出力している。<br>
以下の例では、lsコマンドの実行結果を変数FILESに代入して、echoで出力している。<br>
  <source lang="sh">
  <syntaxhighlight lang="sh">
  #!/bin/sh
  #!/bin/sh
   
   
  FILES=$(ls)
  FILES=$(ls)
  echo "$FILES"
  echo "$FILES"
  </source>
  </syntaxhighlight>
または<br>
または<br>
  <source lang="sh">
  <syntaxhighlight lang="sh">
  #!/bin/sh
  #!/bin/sh
   
   
  FILES=`ls`
  FILES=`ls`
  echo "$FILES"
  echo "$FILES"
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


56行目: 56行目:
<br>
<br>
以下の例では、カレントディレクトリ下の.shファイルを再帰的に列挙している。<br>
以下の例では、カレントディレクトリ下の.shファイルを再帰的に列挙している。<br>
  <source lang="sh">
  <syntaxhighlight lang="sh">
  find . -name '*.sh' | while read SHFILE; do
  find . -name '*.sh' | while read SHFILE; do
     echo "$SHFILE"
     echo "$SHFILE"
  done
  done
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


68行目: 68行目:
forループのinの後の変数(以下の例では、変数SHFILES)には、スペース区切りで各要素が列挙される。<br>
forループのinの後の変数(以下の例では、変数SHFILES)には、スペース区切りで各要素が列挙される。<br>
変数SHFILESの値にスペースが含まれる場合、行を1つの要素として処理するためには、変数をダブルクォーテーションで囲む必要がある。<br>
変数SHFILESの値にスペースが含まれる場合、行を1つの要素として処理するためには、変数をダブルクォーテーションで囲む必要がある。<br>
  <source lang="sh">
  <syntaxhighlight lang="sh">
  SHFILES=$(find . -name '*.sh')
  SHFILES=$(find . -name '*.sh')
   
   
74行目: 74行目:
     echo "$SHFILE"
     echo "$SHFILE"
  done
  done
  </source>
  </syntaxhighlight>
<br><br>
 
== 日時 ==
<code>date</code>コマンドを使用すると、現在時刻を表す文字列を自由なフォーマットで取得することができる。<br>
例えば、時刻入りの簡単なログを出力する場合やバックアップを作成する時のファイル名の構成のために使用する。<br>
<br>
以下の例では、<code>date</code>コマンドを使用して、日付からYYYYMMDD-HHMMSSのような文字列を作成している。<br>
date +%Y%m%d-%H%M%S
20200101-083015
<br>
以下の例では、現在日時をファイル名に付加してファイルのコピー(バックアップ)を行っている。<br>
cp Sample.txt Sample_`date +%Y%m%d`.txt
# 出力
ls
Sample.txt
Sample_20050102.txt
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:シェルスクリプト]]
[[カテゴリ:シェルスクリプト]]