ユーザ用ツール

サイト用ツール


shellscript

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
shellscript [2025/10/09 12:09] nullponshellscript [2025/10/31 02:06] (現在) nullpon
行 3: 行 3:
 ===== bash ===== ===== bash =====
  
-シェルスクリプトは基本的にはbashをターゲットに作成する。+シェルスクリプトはbashをターゲットに作成する。POSIX互換のシェルの方がポータビリティが高いが今時bashがない環境は少ない
  
 <code> <code>
行 11: 行 11:
 </code> </code>
  
-shebangは''#!/bin/sh''はしない+そんな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>
  
-dockerで起動する場合、alpineにはbashが入ってないため、ubuntu-slimをベースイメージにする。 
 ===== shの実行オプション ===== ===== shの実行オプション =====
  
shellscript.1760011779.txt.gz · 最終更新: by nullpon