バッチ(bash)ソース引っこ抜けて これで少しバッチ力あげれそう。かな?

はてブログの仕様かわったのか?新規でブログ書こうとしたら1つ前の記事がそのまま表示されるんだが。

よく見たらキャッシュされたものを表示しましたーみたいなnotificationがついてるし。意味不明すぎる。いやそれもう投稿済みだから・・

 

注意)書きなぐりなので読まれる方は注意してください。

 

と愚痴ったところで、具体的には言えないが某VagrantBoxに入っているバッチをローカルに落とせて、これでバッチ力を高められそう!と期待している。

以前から欲しいと思って実行してなかったんだが、抜き取ったバッチ、結構良く出来ていて、CUIなのにGUI並みの画面構成というか、良く出来てるなあ~と感心させられた。

だから自分でも同じようなことできたら良いのに。ってずっと思っていた。

 

やっぱりバッチと言えど、ライブラリ(関数集)は別に作ってそこに貯めこんで、メインでライブラリを呼び出しているっていうのはフツーなんだろうなと改めて思った。

変数名 自動的に設定される値
$# 実行時に指定された引数の数を表す変数。$ ./test.sh AAA BBB CCC」と実行された場合、シェルスクリプト test.sh 内で変数 $# を参照するとその値は 3 となる。
$@ シェルスクリプト実行時、もしくは set コマンド実行時に指定された全パラメータが設定される変数。 変数 $* と基本的に同じだが、 "” で囲んだときの動作が異なる。
$* **シェルスクリプト実行時、もしくは set コマンド実行時に指定された全パラメータが設定される変数。**変数 $@ と基本的に同じだが、 "” で囲んだときの動作が異なる。
$0 実行時のコマンド名が設定される変数。./test.sh」と実行した場合には「./test.sh」が、「/home/user/test.sh」と実行した場合には「/home/user/test.sh」が設定される。
$1 - $n シェルスクリプト実行時に指定した引数の値がそれぞれ設定される変数。 1番目に指定した引数は $1 に、2番目に指定した引数は $2 に、n 番目に指定した引数は $n に設定される。10番目以降の引数参照時は ${10} のように {} を使用する必要がある。これは $10$1 "0" のように、シェルに誤った解釈をされることを防ぐためである。

引数を処理する | UNIX & Linux コマンド・シェルスクリプト リファレンス ( https://shellscript.sunone.me/parameter.html )

 

あとこの辺。バッチ作りやってるときはいいんだけど、結構忘れがちになる。

 

見てて思ったのは、

local

do~done

source

この辺って使ってないなあ。

 

local

man local を参照すると「local [option] [name[=value] ...]」との記載があるので、変数名のみで宣言が可能そうと気づきました。

do~done

items=(
"altair"
"betelgeuse"
"canopus"
)

for item in "${items[@]}" ; do
echo "[ ${item} ]"
done


items[0]="altair"
items[1]="betelgeuse"
items[2]="canopus"

for item in "${items[@]}" ; do
echo "[ ${item} ]"
done


for i in `seq 1 10`; do
echo ${i}
done

 

source

「source」コマンドは、ファイルに書かれたコマンドを現在のシェルで実行する、というコマンドです。
bash ファイル」などの場合は、現在のシェルとは別のプロセスとしてファイルを実行します。catコマンドやlsコマンドなど、ファイルに書かれているコマンド行を実行するだけなら、処理結果は同じになります。しかし、シェル変数や環境変数の扱い方が変わります ※2。シェル変数は現在実行中のシェルでのみ有効な変数。環境変数は実行されたプログラム(子プロセス)に引き継がれる変数。どちらもシェルで利用可能だ。exportコマンドを使うと、シェル変数を環境変数に変換できる。

sourceコマンドでは、実行したファイル内で扱われた変数の値が保持される。

sourceコマンドについて詳しくまとめました 【Linuxコマンド集】 ( https://eng-entrance.com/linux-command-source#source-2 )

  • $ bash [file] はシェルスクリプト内の「裏側=閉じられた環境」でコマンドを実行する。
  • $ source [file] は「表側=開いた環境」で、コマンドを実行する

Linux - bashでsourceコマンドで実行した先でexportした変数がブランクになってしまう|teratail ( https://teratail.com/questions/110290 )