ユーザ用ツール

サイト用ツール


shellscript

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
shellscript [2021/09/29 06:24] – [shの実行オプション] nullponshellscript [2024/08/20 15:31] (現在) nullpon
行 3: 行 3:
 ===== bash ===== ===== bash =====
  
-シェルスクリプトは基本的にはbashをターゲットに作成する+シェルスクリプトは基本的にはbashをターゲットに作成する
  
 <code> <code>
行 10: 行 10:
 ... ...
 </code> </code>
 +
 +shebangは''#!/bin/sh''にはしない
  
 dockerで起動する場合、alpineにはbashが入ってないため、ubuntu-slimをベースイメージにする。 dockerで起動する場合、alpineにはbashが入ってないため、ubuntu-slimをベースイメージにする。
行 77: 行 79:
   read line   read line
   echo $line   echo $line
 +
 +プロンプトを出して入力を促す
 +
 +  echo -n "User Name: "
 +  read username
 +  echo $username
 +  
 +zshでは以下のようにかける
 +
 +  read "username?User Name: "
 +  echo $username
 +  
 +入力値をマスクしたい場合はread -s(決定時の改行も出力されなくなるのでechoを挟むとよい)
 +
 +  read -s "password?Password: "
 +  tty -s && echo
 +  echo $password | shasum -a 256
 +
 +
      
 標準入力が尽きるまで行を読み取る(Ctrl-DでEOFを送信) 標準入力が尽きるまで行を読み取る(Ctrl-DでEOFを送信)
行 324: 行 345:
 </code> </code>
  
-''$@'' と ''$*'' はダブルクオートで括った場合の動作が異なる。''$*'' は引数が一つの値にまとめられてしまう。ほとんどの場合、''$@'' の挙動が求められるので、''$@'' を使っておけば間違いない+''$@'' と ''$*'' はダブルクオートで括った場合の動作が異なる。''"$@"''は''"1" "2" "3"''、''"$*"''は''"1 2 3"''と展開される。 
 + 
 + 
 +''$*'' は引数が一つの値にまとめられてしまう。ほとんどの場合、''$@'' の挙動が求められるので、''$@'' を使っておけば間違いない
  
 <code> <code>
行 362: 行 386:
 ===== ヒアドキュメント ===== ===== ヒアドキュメント =====
  
-==== 変数に格納 ====+変数に格納
  
 <code shellscript> <code shellscript>
-hoge=$(<< 'EOS' +val=$(cat << 'EOS' 
-a = ARGV.first.split("=").last +hoge 
-puts a.gsub(/^\//, "https://")+fuga 
 +piyo
 EOS EOS
 ) )
 +</code>
 +
 +
 +標準入力に渡す
 +
 +<code shellscript>
 +while read -r line
 +do
 +  echo $line
 +done << 'EOS'
 +hoge
 +fuga
 +piyo
 +EOS
 +)
 +</code>
 +
 +
 +一度変数を経由する。''<<<''はヒアストリングと呼ばれるものでPOSIXには定義されておらずshでは使用できない。bashやzshで使用できる
 +
 +<code shellscript>
 +val=$(cat << 'EOS'
 +hoge
 +fuga
 +piyo
 +EOS
 +)
 +
 +while read -r line
 +do
 +  echo $line
 +done <<< $val
 +</code>
 +
 +クオートの有無は変数展開するかしないか
 +
 +<code shellscript>
 +val='test'
 +
 +while read -r line
 +do
 +    echo $line
 +done << "EOF"
 +${val}
 +${val}
 +${val}
 +EOF
 +</code>
 +
 +クオートありの場合は変数展開されずに以下のように出力される
 +
 +<code>
 +${val}
 +${val}
 +${val}
 </code> </code>
  
shellscript.1632896681.txt.gz · 最終更新: 2021/09/29 06:24 by nullpon