ユーザ用ツール

サイト用ツール


shellscript

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
shellscript [2025/10/11 16:48] nullponshellscript [2025/10/31 02:06] (現在) nullpon
行 11: 行 11:
 </code> </code>
  
-そんなbashがない環境の代表がalpine。dockerでシェルスクリプトを起動するならdebianやubuntu良いだろ+そんなbashがない環境の代表がalpine。dockerでシェルスクリプトを起動するならalpineを避けてdebianやubuntuをベースにすると良い。 
 + 
 +===== シェルスクリプトの実行方法 ===== 
 + 
 +  - ''source''コマンドまたは''.''(スクリプトで定義した関数や変数を読み込む場合) 
 +  - ''bash'', ''zsh''コマンドなどの引数で実行(理由がなければ避ける) 
 +  - 実行権限を付与して直接実行(普段はこれ) 
 + 
 +==== sourceコマンドまたは. ==== 
 + 
 +ファイル内に定義されているシェル関数や変数をシェルにロードする目的で使用する 
 + 
 +<code sh> 
 +HOGE='1' 
 + 
 +p() { 
 +  echo "$HOGE" 
 +
 + 
 +p  
 +</code> 
 + 
 +これを実行すると、スクリプト終了後もpやHOGEがシェルに残る。 
 + 
 +<code sh> 
 +$ source ./sample.sh 
 +
 +$ echo $HOGE 
 +
 +$ p 
 +
 +$ HOGE=2 
 +$ p 
 +
 +</code> 
 + 
 +''source''や''.''は変数や関数定義の読み込みのために使べきもので何らかの処理に使うのは不適切。pythonのvenvのactivateがこの方法でコマンドを作成している 
 + 
 +なお''.''について、bashでは以下いずれも動作するが、zshでは下は動作しない。''.''はファイルをフルパスまたは相対パスで与えるのが本来の記述でファイル名のみの指定で動作するのはbash固有の拡張。 
 + 
 +<code sh> 
 +$ . ./hoge.sh 
 +$ . hoge.sh  
 +</code> 
 + 
 +==== bash, zshの引数として実行 ==== 
 + 
 + 
 +意図がなければ基本的には避けるべき実行方法 
 + 
 +<code sh> 
 +$ bash sample.sh  
 +</code> 
 +  
 +UNIXスクリプトは実行するシェル・ランタイムをshbangで指定する。以下のスクリプトはzshを想定しておりbashでは正しく動作しない、またはエラーになる可能性がある 
 + 
 +<code sh> 
 +#!/bin/zsh 
 + 
 +name="hello" 
 +echo ${name:u} 
 +</code> 
 + 
 +<code sh> 
 +$ zsh hoge.sh 
 +HELLO 
 +$ bash hoge.sh 
 +hello 
 +</code> 
 + 
 +逆に自分がシェルスクリプトを書くときも何も考えず''#!/bin/bash''と書くのもよくない。bashを指定したらbashでは動作しない機能を使わないように注意が必要 
 + 
 +====  実行権限を付与して直接実行 ==== 
 + 
 +普通はこれで実行する 
 + 
 +<code sh> 
 +$ chmod +x sample.sh   # 一度のみで良い 
 +$ ./sample.sh  
 +</code>
  
 ===== shの実行オプション ===== ===== shの実行オプション =====
shellscript.1760201329.txt.gz · 最終更新: by nullpon