2022-02-11 · 3

シェルスクリプト

linuxshell

この記事は公開から2年以上経過しています。

-   chmod 700(755) [a.sh](http://a.sh) → ./a.sh
  • 変数の指定
    • TXT=”HelloWorld”
    • = 両側に空白があってはならない
  • 変数の呼び出し
    • ${TXT} のように変数を使用可能
    • “${TXT}”
  • 読み込み
    • read

条件文

  • if [ 条件文1 ]; then
    • 条件文 1 が真の場合に実行する命令
  • elif [ 条件文2 ]; then ←- 条件が必要な場合に追加可能
    • 条件文 1 が偽で条件文 2 が真の場合に実行する命令
  • else
    • 条件文 1、条件文 2 がともに偽の場合に実行する命令
  • fi

比較表

数値比較 / 説明 / 文字比較 / 説明 / ファイル比較 / 説明

<table style="border-collapse: collapse; width: 100%;" border="1" data-ke-align="alignLeft"><tbody><tr><td>A -eq B</td><td>A と B が等しいか</td><td>A = B</td><td>文字 A、B が等しいか</td><td>-d file</td><td>ファイルが存在しディレクトリか</td></tr><tr><td>A -ge B</td><td>A が B 以上か</td><td>A != B</td><td>文字 A、B が異なるか</td><td>-e file</td><td>ファイルが存在するか</td></tr><tr><td>A -gt B</td><td>A が B より大きいか</td><td>A < B</td><td>文字列 A が B より小さいか(バイト)</td><td>-f file</td><td>ファイルが存在しファイルか</td></tr><tr><td>A -le B</td><td>A が B 以下か</td><td>A > B</td><td>文字列 A が B より大きいか(バイト)</td><td>-r file</td><td>ファイルが存在し読み取り可能か</td></tr><tr><td>A -lt B</td><td>A が B より小さいか</td><td>-n A</td><td>A の文字列長が 0 より大きいか</td><td>-s file</td><td>ファイルが存在し空でないか</td></tr><tr><td>A -ne B</td><td>A と B が等しくないか</td><td>-z A</td><td>A の文字列長が 0 か</td><td>-w file</td><td>ファイルが存在し書き込み可能か</td></tr></tbody></table>

case

case 変数 in
	パターン1)
		パターン1が真の場合に実行する命令;;
	パターン2)
		パターン2が真の場合に実行する命令;;
	*)
		上で指定したどのパターンにも該当しない場合に実行する命令;;
esac

ループ

for

for 変数 in 変数に入れるデータ
do
	データが終わるまで繰り返し実行する命令
done

while

while 条件文
do
	条件が真である間、繰り返し実行する命令
done
  • ホスト名出力ループ
#!/bin/bash

for SVR in 22.1.24.10 22.1.24.20 22.1.24.30
do
	echo "This is ${SVR} Server"
	ssh ${SVR} "hostname"
done
  • seq を使ったループ
for NUM in $(seq 1 3)
do
	echo "[${NUM}] を出力します"
	echo ""
done
  • nginx start/restart/stop/status シェルを作る
#!/bin/bash

 ./nginx.sh start
 ./nginx.sh restart
 ./nginx.sh stop

CMD=$1

case "$CMD" in
start)
	systemctl start nginx;;
restart)
	systemctl restart nginx;;
stop)
	systemctl stop nginx;;
status)
	systemctl status nginx;;
*)
	echo "wrong code";;
esac
  • 例 1:ロードが 5 以上ならメッセージを出力

  • 例 2:nginx のプロセス番号を出力後、システム終了

    • ps - ef | grep nginx
    • pgrep -l nginx / pgrep -a nginx / ps axfwwww | grep nginx
    • systemctl status nginx | grep nginx→
  • 例 3:hostname を調べた後、それが kerberos サーバーかどうか判別

  • 例 4:ネットワークアダプター設定の変更

逆の場合も作ってみる

  • 例 5:/var/www/html があるか、あればそれがファイルか確認するスクリプトを一行で
  • 例 6:crontab を使って毎分システム時刻を知らせるシェルファイルを実行させるスクリプト。正時になると "happy day" を出力
  • 例 7:/var/log/apache2/access.log ファイルを 5 分ごとに ~ .bak(年月日分) として作成し /var/log/apache2/backuplog に保存、そして access.log の内容を消す
  • 起動時に iptables NAT を適用し、TCP ポート 1~80 までのフォワーディングポリシーを塞ぐ設定

原文(韓国語): tistory — 2022-02-11 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。

コメント

コメントを削除しますか?

関連記事

シェルスクリプト · 나봄하랑