「シェルスクリプトの基礎 - 変数」の版間の差分

文字列「</source>」を「</syntaxhighlight>」に置換
(文字列「</source>」を「</syntaxhighlight>」に置換)
12行目: 12行目:
  echo "Hello $name"  # ダブルクォーテーションは変数を展開する
  echo "Hello $name"  # ダブルクォーテーションは変数を展開する
  echo 'Hello $name'  # シングルクォーテーションは変数を展開しない
  echo 'Hello $name'  # シングルクォーテーションは変数を展開しない
  </source>
  </syntaxhighlight>
<br>
<br>
  # 出力
  # 出力
24行目: 24行目:
   
   
  echo "Hello $name !"
  echo "Hello $name !"
  </source>
  </syntaxhighlight>
<br>
<br>
  # 出力
  # 出力
45行目: 45行目:
  echo "${LANG#*.}" # (2) .文字までを削除
  echo "${LANG#*.}" # (2) .文字までを削除
  echo "${LANG%.*}" # (3) .文字以降を削除
  echo "${LANG%.*}" # (3) .文字以降を削除
  </source>
  </syntaxhighlight>
<br>
<br>
  # 出力
  # 出力
80行目: 80行目:
  readonly -a arr  # 配列arrをreadonlyにする
  readonly -a arr  # 配列arrをreadonlyにする
  readonly -f func  # 関数funcをreadonlyにする
  readonly -f func  # 関数funcをreadonlyにする
  </source>
  </syntaxhighlight>
<br>
<br>
以下のように、変数の定義と同時にreadonlyを指定することも可能である。<br>
以下のように、変数の定義と同時にreadonlyを指定することも可能である。<br>
  <source lang="sh">
  <source lang="sh">
  readonly USERNAME="Mike"
  readonly USERNAME="Mike"
  </source>
  </syntaxhighlight>
<br>
<br>
以下の例では、変数MAX_SIZEを100で初期化した後、200という値を代入しようとしている。<br>
以下の例では、変数MAX_SIZEを100で初期化した後、200という値を代入しようとしている。<br>
94行目: 94行目:
  readonly MAX_SIZE=100
  readonly MAX_SIZE=100
  MAX_SIZE=200
  MAX_SIZE=200
  </source>
  </syntaxhighlight>
<br>
<br>
  # 出力
  # 出力
118行目: 118行目:
     echo $NAME
     echo $NAME
  fi
  fi
  </source>
  </syntaxhighlight>
<br>
<br>
==== 変数に値が代入されていないことを確認する ====
==== 変数に値が代入されていないことを確認する ====
128行目: 128行目:
     echo 'NAME is not set'
     echo 'NAME is not set'
  fi
  fi
  </source>
  </syntaxhighlight>
<br>
<br>
  # 出力
  # 出力
143行目: 143行目:
  let val=$val+200
  let val=$val+200
  echo $val
  echo $val
  </source>
  </syntaxhighlight>
または
または
  <source lang="sh">
  <source lang="sh">
151行目: 151行目:
  val=$(($val+200))
  val=$(($val+200))
  echo $val
  echo $val
  </source>
  </syntaxhighlight>
<br>
<br>
  # 出力
  # 出力
168行目: 168行目:
  VALUE3=`expr "$str1" "+" "$str2"`
  VALUE3=`expr "$str1" "+" "$str2"`
  echo "$VALUE3"
  echo "$VALUE3"
  </source>
  </syntaxhighlight>
<br>
<br>
  # 出力
  # 出力
188行目: 188行目:
  ANS=`echo $VALUE1*$VALUE2 | bc`
  ANS=`echo $VALUE1*$VALUE2 | bc`
  echo $ANS
  echo $ANS
  </source>
  </syntaxhighlight>
<br>
<br>
下表に、<code>let</code>コマンドで使用できる演算子を示す。(四則演算は省略)<br>
下表に、<code>let</code>コマンドで使用できる演算子を示す。(四則演算は省略)<br>
249行目: 249行目:
   
   
  echo $RANDOM
  echo $RANDOM
  </source>
  </syntaxhighlight>
<br>
<br>
  # 出力
  # 出力
266行目: 266行目:
   
   
  echo $STR
  echo $STR
  </source>
  </syntaxhighlight>
<br>
<br>
また、以下のように変数を{}で括る。<br>
また、以下のように変数を{}で括る。<br>
276行目: 276行目:
   
   
  echo $STR
  echo $STR
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


304行目: 304行目:
  FILES=$(ls)
  FILES=$(ls)
  echo "$FILES"
  echo "$FILES"
  </source>
  </syntaxhighlight>
または<br>
または<br>
  <source lang="sh">
  <source lang="sh">
311行目: 311行目:
  FILES=`ls`
  FILES=`ls`
  echo "$FILES"
  echo "$FILES"
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


412行目: 412行目:
  # 出力
  # 出力
  aaaBbbccc
  aaaBbbccc
  </source>
  </syntaxhighlight>
<br>
<br>
* パターンに一致する文字列を全て置換する。
* パターンに一致する文字列を全て置換する。
423行目: 423行目:
  # 出力
  # 出力
  aaaBBBccc
  aaaBBBccc
  </source>
  </syntaxhighlight>
<br>
<br>
sedコマンドと同様の結果を、シェルスクリプトの機能だけで実現できていることがわかる。<br>
sedコマンドと同様の結果を、シェルスクリプトの機能だけで実現できていることがわかる。<br>
429行目: 429行目:
  X=aaabbbccc
  X=aaabbbccc
  Y=$(echo $X | sed -e 's/bbb/BBB/g')
  Y=$(echo $X | sed -e 's/bbb/BBB/g')
  </source>
  </syntaxhighlight>
<br>
<br>
* フルパスからbasenameを取り出す。
* フルパスからbasenameを取り出す。
442行目: 442行目:
  # 出力
  # 出力
  ccc
  ccc
  </source>
  </syntaxhighlight>
<br>
<br>
また、basenameを取得する場合、一般的に、basenameコマンドを使用した方が簡単である。<br>
また、basenameを取得する場合、一般的に、basenameコマンドを使用した方が簡単である。<br>
  <source lang="sh">
  <source lang="sh">
  basename $X
  basename $X
  </source>
  </syntaxhighlight>
<br>
<br>
* フルパスからdirnameを取り出す。
* フルパスからdirnameを取り出す。
460行目: 460行目:
  # 出力
  # 出力
  /aaa/bbb
  /aaa/bbb
  </source>
  </syntaxhighlight>
<br>
<br>
また、ディレクトリ名を取得する場合、一般的に、dirnameコマンドを使用した方が簡単である。<br>
また、ディレクトリ名を取得する場合、一般的に、dirnameコマンドを使用した方が簡単である。<br>
  <source lang="sh">
  <source lang="sh">
  dirname $X
  dirname $X
  </source>
  </syntaxhighlight>
<br>
<br>
* '#'以降のコメントを削除する。
* '#'以降のコメントを削除する。
477行目: 477行目:
  # 出力
  # 出力
  aaa bbb  
  aaa bbb  
  </source>
  </syntaxhighlight>
<br>
<br>
==== 初期値 ====
==== 初期値 ====
513行目: 513行目:
  # 出力
  # 出力
  -bash: count: パラメータが null または設定されていません
  -bash: count: パラメータが null または設定されていません
  </source>
  </syntaxhighlight>
<br>
<br>
?の後ろに表示するメッセージを指定することもできる。<br>
?の後ろに表示するメッセージを指定することもできる。<br>
522行目: 522行目:
  # 出力
  # 出力
  -bash: count: パラメータが設定されていません
  -bash: count: パラメータが設定されていません
  </source>
  </syntaxhighlight>
<br>
<br>
* ${変数:+word}
* ${変数:+word}
534行目: 534行目:
  # 出力
  # 出力
  1
  1
  </source>
  </syntaxhighlight>
<br>
<br>
  <source lang="sh">
  <source lang="sh">
544行目: 544行目:
  # 出力
  # 出力
  何も表示されない
  何も表示されない
  </source>
  </syntaxhighlight>
<br>
<br>
==== 位置指定で部分文字列を抽出する ====
==== 位置指定で部分文字列を抽出する ====
565行目: 565行目:
  # 出力
  # 出力
  DEFGHIJ
  DEFGHIJ
  </source>
  </syntaxhighlight>
<br>
<br>
  <source lang="sh">
  <source lang="sh">
574行目: 574行目:
  # 出力
  # 出力
  DEFG
  DEFG
  </source>
  </syntaxhighlight>
<br>
<br>
offsetやlength に負の値を指定して、末尾から文字列を抽出することもできる。<br>
offsetやlength に負の値を指定して、末尾から文字列を抽出することもできる。<br>
585行目: 585行目:
  # 出力
  # 出力
  HIJ
  HIJ
  </source>
  </syntaxhighlight>
<br>
<br>
  <source lang="sh>
  <source lang="sh>
594行目: 594行目:
  # 出力
  # 出力
  FGH
  FGH
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


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