bashコーディング規約
の編集
https://erion1107-pukiwiki.erion1107.net/?bash%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%8F%E7%B4%84
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
kiji-template
2018年度学習計画メモ
20180217-01-オフラインインストール発表用メモ
Ansible構成例
AWS認定ソリューションアーキテクト・アソシエーション認定テスト対策
bashコーディング規約
BracketName
CentOS7で自宅サーバー作成勉強用リスト
CentOS 7とSamba4で自宅用Active Directory Domain Controller (AD DC)を構築する① インストール編
CloudflareとLet’s EncryptでWebサイトをHTTPS化
COBOLプログラミング入門
conoHaAPIまとめ
Docker-Command一覧
DockerCommandCheatSheet
Docker_Cmd_List
ERION1107-mywiki
erion1107-mywiki
ERION1107自分用のwiki
ESXiインストールについて
FontPage
FormattingRules
FPGAのアーキテクチャとソフトエラー起因の可用性低下
FrontPage
F#EntryForWeb
F#入門
Help
IaC for Ansible with Windows OS
Install_Redmine3.4_with_CentOS7.3
InterWiki
InterWikiName
InterWikiSandBox
Java-Struts2導入について
JavaSwingコンポーネント
Java入門
Java入門2
Linux 標準教科書に出てくるコマンドリスト
matplotlib-円グラフの作成メモ
MBSAについて
MenuBar
Non-BlockingIOを使ってみよう-Java編
PHP
PowerShell入門
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
pukiwiki記法の書き方入門
python-code-memo
re-view入門
RecentDeleted
SandBox
SoftEther VPN for Linuxについて
SoftEtherVPNについて
Spring解体新書メモ
SQL_Entry
StudyCentOSForWebSiteBuild
Tips作業メモ
UML
UNIXコマンド
Using_Prism.Unity_with_WPF
Vagrant入門
VivlioStyleで行こう!
VPNのススメ
WikiEngines
WikiName
WikiWikiWeb
WindowsPhone開発のためのPrism+ReactiveProperty基本
WindowsとLinuxのオフラインインストールについて調べてみた
WindowsとLinuxのオフラインインストールについて調べてみた 2
wireshark
WSL(Windows Subsystem for Linux)の基本Memo
yaml-sample
YAMLを覚えよう
YukiWiki
ZABBIX
■Redmine On Docker
お仕事用メモ
はじめてのアプリ発注
アプリ開発後に行う動作テストについて
カタン戦術論
デザインパターン23種
プレゼン発表のコツ
レンタルサーバーに独自SSL「Let's Encrypt」導入(Windows10編)
個人アプリ開発のメモ
勉強会発表用メモ
自分用のpukiwiki
記憶術メモ
[[bashコーディング規約]] @echo off cd /D %~dp0 SET filename= echo F | xcopy /R %filename% _old\%filename% cd _old rename %filename% %date:/=%_%time::=%_%filename% exit /b #contents * bashコーディング規約 [#f00e2b43] ** 目的(ゴール) [#p8ad2fe0] + Linuxにおける基本的なバッチファイルの作成方法を覚える ** モチベーション [#ta5d5f1a] + 一定の品質を保ちたい + 書くたびに書き方が変わるのは好ましくない * バッチシェルの中身について [#wecbd4d6] ** 宣言 [#k5fc76cf] *** シェバング(shebang) [#g834b4d9] シェバング(shebang)は#!/bin/shではなく#!/bin/bashにする + シバン、シェバンとも言われる + #!/bin/shは実行環境によって様々なシェルにシンボリックリンクになっているので、bashなら#!/bin/bashと明示しよう #!/bin/bash *** インデント [#se2c39c4] インデントは半角スペース2つ + 1行が横に長くなり折り返されないように *** 処理内容および使い方をスクリプト内に記載する(usage()) [#pb7eb098] + 何をしてくれるスクリプトか、どのように使うのかusage()関数を用意しよう ++ ヘッダコメントでもいいけど function usage() { cat <<_EOT_ Usage: $0 [-a] [-b] [-f filename] arg1 ... Description: hogehogehoge Options: -a aaaaaaaaaa -b bbbbbbbbbb -f ffffffffff _EOT_ exit 1 } *** オプション解析を行う(getopts) [#r2e76a0d] #!/bin/bash function usage() { cat <<_EOT_ Usage: $0 [-a] [-b] [-f filename] arg1 ... Description: hogehogehoge Options: -a aaaaaaaaaa -b bbbbbbbbbb -f ffffffffff _EOT_ exit 1 } if [ "$OPTIND" = 1 ]; then while getopts abf:h OPT do case $OPT in a) FLAG_A="on" echo "FLAG_A is $FLAG_A" # for debug ;; b) FLAG_B="on" echo "FLAG_B is $FLAG_B" # for debug ;; f) ARG_F=$OPTARG echo "ARG_F is $ARG_F" # for debug ;; h) echo "h option. display help" # for debug usage ;; \?) echo "Try to enter the h option." 1>&2 ;; esac done else echo "No installed getopts-command." 1>&2 exit 1 fi echo "before shift" # for debug shift $((OPTIND - 1)) echo "display other arguments [$*]" # for debug echo "after shift" # for debug *** 変数の命名規則 [#sa8e2943] *** 定数はreadonly宣言する [#uf66d51d] *** 定数は大文字、定数以外は小文字 [#cc9950c1] readonly CONSTANT_PARAM="hoge" score=100 *** 複数単語の場合は「名詞」と「名詞」を_で結合 [#p2ea5ff1] readonly MAX_NUMBER=100 *** ローカル変数の先頭に_を付ける [#mb78998b] function cal_score_ave() { local _score_sum=0 # ... } *** ファイルおよびディレクトリの命名規則 [#hf9eb60e] + 末尾に/をつけない + readonly宣言して定数にする |対象|命名規則|備考|h |ファイル名(絶対パス)|HOGE_FILE| | |ディレクトリ名(絶対パス)|HOGE_DIR| | |ファイル名(パスなし)|HOGE_FILENAME| | |ディレクトリ名(パスなし)|HOGE_DIRNAME| | |# ファイル名(絶対パス)|readonly HOGE_FILE="/var/tmp/hoge.txt"| | |# ディレクトリ名(絶対パス)|readonly HOGE_DIR="/var/tmp/hoge"| | |# ファイル名(パスなし)|readonly HOGE_FILENAME="hoge.txt"| | |# ディレクトリ名(パスなし)|readonly HOGE_DIRNAME="hoge"| | ** 変数の宣言箇所 [#eed94dcd] ***値を変更する可能性のある場合は冒頭に [#s51e4aa1] +あとで値を変更する場合にわかりやすい 値を変更せず内部的に利用する場合は利用する箇所の直前に +変数と処理の関連性がわかりやすい ** 関数の命名規則 [#udd924fd] *** function宣言する [#f15fa18d] + 小文字で「動詞」と「名詞」を_で結合• usage()は例外 function cal_score_ave() { # ... return 0 } *** 関数は必ずreturnする [#uf3d08eb] function cal_score_ave() { # ... return 0 } *** リターンコード:正常終了は0、異常終了は0以外 [#kbafd80c] *** パイプの前後に半角スペース1つ [#q63ce9df] CMD1 | CMD2 *** リダイレクトの前は半角スペース1つ、後はスペースなし [#ce203a22] CMD1 >hoge.txt CMD1 >>hoge.txt CMD2 <fuga.txt CMD2 <<fuga.txt *** リダイレクトはグルーピングする [#hda06f89] { echo "hoge" echo "fuga" echo "piyo" } >>logfile.log *** 制御構文 [#v81a3663] *** if、thenは同一行に、セミコロンの後ろは半角スペース1つ [#bac811a9] if [ $? -ne 0 ]; then # ... exit 1 fi *** for、whileのdoとdoneを揃える [#r1d1f91a] for _score in ${SCORE_ARRAY[@]} do _score_sum=$((_score_sum + _score)) done while IFS=$`\n` read _line do echo $_line done <hoge.txt *** if文を省略しない [#yd313b43] [ $hoge = $foo ] && echo "true" || echo "false" * 参考情報1.シェルスクリプト Tips [#z41c7516] +2.bash によるオプション解析 + 3.逆引きシェルスクリプト/getoptsを利用して引数を取得する(bashビルドイン) * References [#k5438249] bashコーディング規約参考からリンク2年以上前 - 初心者向けシェルスクリプトの基本コマンドの紹介からリンク約2年前 - bashでshellを作るとき参考になるサイト集からリンク12ヶ月前 - Mac OS Xで時間帯ごとに壁紙を変えたいからリンク2ヶ月前 - Bash で readonly した変数を再度編集可能にするからリンク約1ヶ月前 *追加コメント [#o1d8c80a] Bash, Zsh, Korn shellでしか使えませんが、[よりも[[のほうが一般的な演算子や正規表現が使えるのでオススメです。 http://mywiki.wooledge.org/BashFAQ/031 functionはBash・zshでしか使えないので追記をよろしくお願いします。この書き方で慣れてしまうとShebangが#!/bin/shのスクリプトに手を加えるときに少し面倒なことになります。(その場合はfunction抜きで書きます)
タイムスタンプを変更しない
[[bashコーディング規約]] @echo off cd /D %~dp0 SET filename= echo F | xcopy /R %filename% _old\%filename% cd _old rename %filename% %date:/=%_%time::=%_%filename% exit /b #contents * bashコーディング規約 [#f00e2b43] ** 目的(ゴール) [#p8ad2fe0] + Linuxにおける基本的なバッチファイルの作成方法を覚える ** モチベーション [#ta5d5f1a] + 一定の品質を保ちたい + 書くたびに書き方が変わるのは好ましくない * バッチシェルの中身について [#wecbd4d6] ** 宣言 [#k5fc76cf] *** シェバング(shebang) [#g834b4d9] シェバング(shebang)は#!/bin/shではなく#!/bin/bashにする + シバン、シェバンとも言われる + #!/bin/shは実行環境によって様々なシェルにシンボリックリンクになっているので、bashなら#!/bin/bashと明示しよう #!/bin/bash *** インデント [#se2c39c4] インデントは半角スペース2つ + 1行が横に長くなり折り返されないように *** 処理内容および使い方をスクリプト内に記載する(usage()) [#pb7eb098] + 何をしてくれるスクリプトか、どのように使うのかusage()関数を用意しよう ++ ヘッダコメントでもいいけど function usage() { cat <<_EOT_ Usage: $0 [-a] [-b] [-f filename] arg1 ... Description: hogehogehoge Options: -a aaaaaaaaaa -b bbbbbbbbbb -f ffffffffff _EOT_ exit 1 } *** オプション解析を行う(getopts) [#r2e76a0d] #!/bin/bash function usage() { cat <<_EOT_ Usage: $0 [-a] [-b] [-f filename] arg1 ... Description: hogehogehoge Options: -a aaaaaaaaaa -b bbbbbbbbbb -f ffffffffff _EOT_ exit 1 } if [ "$OPTIND" = 1 ]; then while getopts abf:h OPT do case $OPT in a) FLAG_A="on" echo "FLAG_A is $FLAG_A" # for debug ;; b) FLAG_B="on" echo "FLAG_B is $FLAG_B" # for debug ;; f) ARG_F=$OPTARG echo "ARG_F is $ARG_F" # for debug ;; h) echo "h option. display help" # for debug usage ;; \?) echo "Try to enter the h option." 1>&2 ;; esac done else echo "No installed getopts-command." 1>&2 exit 1 fi echo "before shift" # for debug shift $((OPTIND - 1)) echo "display other arguments [$*]" # for debug echo "after shift" # for debug *** 変数の命名規則 [#sa8e2943] *** 定数はreadonly宣言する [#uf66d51d] *** 定数は大文字、定数以外は小文字 [#cc9950c1] readonly CONSTANT_PARAM="hoge" score=100 *** 複数単語の場合は「名詞」と「名詞」を_で結合 [#p2ea5ff1] readonly MAX_NUMBER=100 *** ローカル変数の先頭に_を付ける [#mb78998b] function cal_score_ave() { local _score_sum=0 # ... } *** ファイルおよびディレクトリの命名規則 [#hf9eb60e] + 末尾に/をつけない + readonly宣言して定数にする |対象|命名規則|備考|h |ファイル名(絶対パス)|HOGE_FILE| | |ディレクトリ名(絶対パス)|HOGE_DIR| | |ファイル名(パスなし)|HOGE_FILENAME| | |ディレクトリ名(パスなし)|HOGE_DIRNAME| | |# ファイル名(絶対パス)|readonly HOGE_FILE="/var/tmp/hoge.txt"| | |# ディレクトリ名(絶対パス)|readonly HOGE_DIR="/var/tmp/hoge"| | |# ファイル名(パスなし)|readonly HOGE_FILENAME="hoge.txt"| | |# ディレクトリ名(パスなし)|readonly HOGE_DIRNAME="hoge"| | ** 変数の宣言箇所 [#eed94dcd] ***値を変更する可能性のある場合は冒頭に [#s51e4aa1] +あとで値を変更する場合にわかりやすい 値を変更せず内部的に利用する場合は利用する箇所の直前に +変数と処理の関連性がわかりやすい ** 関数の命名規則 [#udd924fd] *** function宣言する [#f15fa18d] + 小文字で「動詞」と「名詞」を_で結合• usage()は例外 function cal_score_ave() { # ... return 0 } *** 関数は必ずreturnする [#uf3d08eb] function cal_score_ave() { # ... return 0 } *** リターンコード:正常終了は0、異常終了は0以外 [#kbafd80c] *** パイプの前後に半角スペース1つ [#q63ce9df] CMD1 | CMD2 *** リダイレクトの前は半角スペース1つ、後はスペースなし [#ce203a22] CMD1 >hoge.txt CMD1 >>hoge.txt CMD2 <fuga.txt CMD2 <<fuga.txt *** リダイレクトはグルーピングする [#hda06f89] { echo "hoge" echo "fuga" echo "piyo" } >>logfile.log *** 制御構文 [#v81a3663] *** if、thenは同一行に、セミコロンの後ろは半角スペース1つ [#bac811a9] if [ $? -ne 0 ]; then # ... exit 1 fi *** for、whileのdoとdoneを揃える [#r1d1f91a] for _score in ${SCORE_ARRAY[@]} do _score_sum=$((_score_sum + _score)) done while IFS=$`\n` read _line do echo $_line done <hoge.txt *** if文を省略しない [#yd313b43] [ $hoge = $foo ] && echo "true" || echo "false" * 参考情報1.シェルスクリプト Tips [#z41c7516] +2.bash によるオプション解析 + 3.逆引きシェルスクリプト/getoptsを利用して引数を取得する(bashビルドイン) * References [#k5438249] bashコーディング規約参考からリンク2年以上前 - 初心者向けシェルスクリプトの基本コマンドの紹介からリンク約2年前 - bashでshellを作るとき参考になるサイト集からリンク12ヶ月前 - Mac OS Xで時間帯ごとに壁紙を変えたいからリンク2ヶ月前 - Bash で readonly した変数を再度編集可能にするからリンク約1ヶ月前 *追加コメント [#o1d8c80a] Bash, Zsh, Korn shellでしか使えませんが、[よりも[[のほうが一般的な演算子や正規表現が使えるのでオススメです。 http://mywiki.wooledge.org/BashFAQ/031 functionはBash・zshでしか使えないので追記をよろしくお願いします。この書き方で慣れてしまうとShebangが#!/bin/shのスクリプトに手を加えるときに少し面倒なことになります。(その場合はfunction抜きで書きます)
テキスト整形のルールを表示する