EchoOn_func
実行するコマンドを表示しながら実行します。
呼び出した関数の中のコマンドは表示しません。
EchoOn_func
str="ABC"
str="${str}DEF"
EchoOff_func
サンプル
関連
テスト
EchoOff_func
EchoOn_func で表示するモードを、元に戻します。
関連
テスト
echo_line_func
水平線を表示します。
テスト
echo_e_func <Text>
エスケープ(\)があるテキストを表示します。 echo -e と同じです。
【引数】
Text
エスケープがあるテキスト
Linux の echo -e と同じです。
Mac OS X Snow Leopard には、 echo -e が使えませんが echo $'...' が使えます。
echo $'...' は、どちらの OS でも使えますが、Text に変数の参照を含めると eval
を使った複雑な記述が必要になってしまうので、echo_e_func を用意しました。
を使って色がついたテキストを表示するときに echo_e_func を使います。
テスト
\n は改行に、\t はタブ文字になります。
ColorText_func "Pass." "Green" "Bold"
echo_e_func "$g_Ret"
"Red"
"Green"
"Yellow"
"Blue"
"Magenta"
"Cyan"
"White"
"RedBack"
"GreenBack"
"YellowBack"
"BlueBack"
"MagentaBack"
"CyanBack"
"WhiteBack"
"Bold"
+
+
文字の色
背景の色
太字
サンプル
ColorText_func <Text> <Color> ... ; <EscapeText>="$g_Ret"
テキストに色を付けます。
【引数】
Text
色を付けるテキスト
Color ...
色の名前、背景の色、太字かどうかの羅列
テスト
ColorText_func "ERROR!" "Red" "Bold"
echo_e_func "$g_Ret"
標準エラー出力にリダイレクトして出力すると、色は付きません。
を付けて、g_Ret を表示すると、色が付きます。
g_Ret
(出力)echo_e_func に渡す色付き文字列
Pass.
ERROR!
Pause_func [--time_out=<Sec>]
シェルにメッセージを表示して、Enter キーを押すまで待ちます。
続行するには Enter キーを押してください . . .
メッセージの内容:
【引数】
Sec
タイムアウトするまでの秒数。 省略時=タイムアウトなし
サンプル
Pause_func
テスト
サンプル
Pause_func --time_out=10
Input_func <Prompt> ; <Key>="$g_Ret"
シェルにメッセージを表示して、ユーザーに入力を求めます。
番号を入力してください >
画面の内容:
Input_func "番号を入力してください >" ; num="$g_Ret"
サンプル
【引数】
Prompt
表示する内容
g_Ret
(出力) ユーザが入力した文字列、入力なし=""
関連
キーボードの自動入力
入力を求められている間に、Ctrl+C を押すと、プログラムは中断します。
エラーにもなりません。 構造化例外処理も行われません。
サンプル
Input_func "続けますか[Y/N] >" ; key1="$g_Ret"
if [ "$key1" != "y" -a "$key1" != "Y" ];then echo "中断しました。" ; exit 1 ;fi
Yes か No かの入力
テスト
SetAutoInputFromMainArg_func
シェル・スクリプトを起動した時のパラメーターを、キーボードの自動入力に使うようにします。
SetAutoInputFromMainArg_func
Input_func "番号を入力してください >" ; num="$g_Ret"
echo "num=$num"
サンプル
$ ./sample.sh 2
num=2
画面の内容:
テスト
InputPath_func <Prompt> [ <Option> ... ] ; <Path>="$g_Ret"
シェルにメッセージを表示して、ユーザーにファイルやフォルダーのパスの入力を求めます。
【引数】
Prompt
表示する内容
Option
オプション(下記)
(出力) ユーザが入力したパスの絶対パス、入力なし=""
g_Ret
テスト
相対パスを入力したとき、基準は、
Option 引数
Enter のみの入力を許可する
入力したパスにファイルが無ければ、再度入力する
入力したパスにフォルダーが無ければ、再度入力する
サンプル
InputPath_func "ファイルのパス >" --ChkFileExists ; path="$g_Ret"
の値になります。
入力したパスに何かあれば、再度入力する
InputCommand_func <self> <Prompt> <Option> <AppKey>
ショートハンド・プロンプトを開いて、コマンドに対応する関数を呼び出します。
【引数】
self
InputCommandOpt クラスのオブジェクトの名前
Option
Main_func の第1引数
プロンプトのガイド文字列
Prompt
if [ "${BASH_VERSINFO[0]}" -ge "4" ];then
declare_AssociativeArrayClass="declare -A"
else
declare_AssociativeArrayClass="declare"
fi
$declare_AssociativeArrayClass g_InputCommandOpt
function Main_func()
{
local AppKey="$2"
local obj="g_InputCommandOpt"
#//=== call InputCommand_func
SetAttr_func $obj Class "InputCommandOpt"
SetAttr_func $obj Lead "bashlib menu - shorthand prompt"
SetAttr_as_AssociativeArrayName_func $obj CommandReplace \
"1" "Help" \
"2" "SearchFile" \
"3" "NewSh" \
"5" "Extract" \
"7" "Test" \
\
"Help" "Help_sth_func" \
"SearchFile" "SearchFile_sth_func" \
"NewSh" "NewSh_sth_func" \
"Extract" "Extract_sth_func" \
"Test" "Test_sth_func" \
SetAttr_as_AssociativeArrayName_func $obj MenuCaption \
"1" "ヘルプ(SVG形式)を開く (Google Chrome や Snap Note で見えます) [Help]" \
"2" "ファイルを検索する [SearchFile]" \
"3" "新規作成する - bashlib が使えるシェル・スクリプト・ファイル [NewSh]" \
"5" "圧縮ファイルを解凍する。ファイル名を一覧する [Extract]" \
"7" "bashlib の自動テストを実行する [Test]" \
InputCommand_func $obj "" "$1" "$AppKey"
}
サンプル
AppKey
Main_func の第2引数
string
.Lead
.CommandReplace
AssociativeArray
AssociativeArray
.MenuCaption
リード文
コマンド名→関数名の連想配列
コマンド名→メニュー項目の表示内容の連想配列
テスト
メニュー項目の番号、コマンド名、関数名を入力できます。
シェルのコマンドも入力できます。
関連
パラメーターをシフトします。
InputOption_func <in_out_OptionName> [...] [--comment="<CommentCSV>"]
長い名前のオプションの設定値をユーザーに求めるモードに入ります。
【引数】
in_out_OptionName
オプション名と同じ名前の変数名
サンプル
InputOption_func word message --comment="ワーク, メッセージ"
画面の例:
現在の設定:
--work="/home/user1" ワーク
--message="temporary" メッセージ
Enterのみ、または . :設定完了
オプションを入力してください(例:--work="abc"、--flag)>
テスト
CommentCSV
コメント、CSV 形式
--flag のように値を指定しなかったときは、値が 1 になります。
--flag のようなオプションを取り消したいときは、値を "" か "0" にしてください。
ファイル操作
書き込み可能なパスを設定します。
指定したパスが書き込み可能でなければ、エラーにします。
指定したフォルダーを作成します。
指定したファイルを格納するフォルダーを作成します。
指定したファイルまたはフォルダーを削除します。
指定した関数を呼び出し、root ユーザーで実行します。
指定したパスと、その親フォルダーの所有者を変更します。
シンボリック・リンクを作成します。
リンクを含まない絶対パスに変換します。
圧縮ファイルを解凍します。
圧縮ファイルに入っているファイルのパスを一覧表示します。
ワイルドカードを展開して、パスを一覧します。
ファイルの内容を置き換えます。
複数行のテキストを置き換えます。
相対パスを絶対パスにします。
親フォルダーの絶対パスを返します。
親フォルダーの方向にファイルを探します。
重要なファイルを誤って消したり上書きすることを防ぎます。
スクリプトを実行する場合、ヒューマン・エラーによって予想と異なる処理をしてしま
うことがあるため、sudo を使った本人確認によるOSの保護だけでは不十分です。
サンプル
function Main_func()
{
local AppKey="$2" ; AppKeyClass.newWritable_method "$AppKey" "$PWD"
}
function Main_func()
{
local AppKey="$2" ; AppKeyClass.newWritable_method "$AppKey" "sub1" "sub2"
}
サンプル
複数指定
を使って、書き込み可能なパスかどうかをチェックできます。
など、bashlib が提供している、ファイルにライトする関数を使うときは、
AppKeyClass.newWritable_method を呼び出す必要があります。
AppKeyClass.newWritable_method <AppKey> <Path> ...
書き込み可能なパスを設定します。
【引数】
AppKey
Main_func 関数の第2引数
Path ...
書き込み可能なパスの羅列。サブ・フォルダーも書き込み可能
テスト
関連
CheckWritable_func <Path>
指定したパスが書き込み可能でなければ、エラーにします。
【引数】
Path
ファイルまたはフォルダーのパス
サンプル
CheckWritable_func "sub/a.txt"
テスト
mkdir_func <FolderPath>
指定したフォルダーを作成します。 すでに存在していてもエラーになりません。
【引数】
FolderPath
作成するフォルダーのパス
サンプル
mkdir_func "sub"
テスト
mkdir_for_it_func <FilePath>
指定したファイルを格納するフォルダーを作成します。
【引数】
FilePath
ファイル・パス
サンプル
mkdir_for_it_func "sub/a.txt" #// sub フォルダーを作成します。
テスト
rm_func <Path> ...
指定したファイルまたはフォルダーを削除します。
【引数】
Path ...
ファイルまたはフォルダーのパスの羅列
書き込み禁止であっても、削除します。
空文字を指定したときは、何もしません。
一時的に root ユーザーになって削除する
サンプル
local AppKey="$2" ; AppKeyClass.newWritable_method "$AppKey" "$PWD"
rm_func "a.txt"
sudo_func rm_func "a.txt"
サンプル
テスト
に対応しています。
sudo_func ...
指定した関数を呼び出し、その中で実行するシェル・コマンドを root ユーザーで実行します。
【引数】
...
sudo_func に対応した関数と、パラメーター
呼び出す関数が、g_TemporarySudo 変数(下記)に対応している必要があります。
サンプル
sudo_func rm_func "a.txt"
sudo_func を経由して呼び出した関数では、g_TemporarySudo="sudo" に、
そうではないときは、g_TemporarySudo="" になります。
function rm_func()
{
local Path="$1"
$g_TemporarySudo rm -r "$Path"
}
関数定義サンプル
テスト
chown_it_and_parent_func [<Option>] <Owner> <Path>
指定したパスと、その親フォルダーの所有者を変更します。
上記サンプルは、chown_it_and_parent_func を呼び出して、ファイルや
フォルダーの作成やすでにあるファイルの修正を行うことができるようにして、
修正が終わったら、所有者を(元の)root に戻しています。
Path にファイルまたはフォルダーが存在するときは、そのファイルまたはフォ
ルダーの所有者を Owner 引数に指定したユーザーに変更します。
存在しないときは、Path の位置に何かを作ることはしません。
Path の親フォルダーが存在しないときは、Owner 引数に指定したユーザーを
所有者としたフォルダーを作成します。
【引数】
Option
-R オプション(サブ・フォルダーにも適用)、または省略
Owner
新しい所有者:所有グループ
Path
ファイルまたはフォルダーのパス
参考
サンプル
sudo_func chown_it_and_parent_func $USER:$USER "sub/sub2/file.txt"
echo "text" > "sub/sub2/file.txt"
sudo_func chown_it_and_parent_func root:root "sub/sub2/file.txt"
Owner に指定したユーザーが自分であれば、Path に指定したファイルが存在
していても存在していなくても、Path にファイルの内容をライトできるように
なります。
テスト
chmod_x_func <FolderPath> <SetCsv> <UnsetCsv>
フォルダーの中のファイルの実行属性を設定、および、設定解除します。
【引数】
FolderPath
処理を行うフォルダー
SetCsv
実行属性を設定するファイル名(ワイルドカード)
UnsetCsv
実行属性を設定解除するファイル名(ワイルドカード)
サンプル
chmod_x_func "." "*.sh" "*.txt, *.log, *.html, *.svg"
テスト
FolderPath に指定したフォルダーのサブ・フォルダーにあるファイルも処理対象
になります。
関連
MakeSymbolicLink_func <LinkSrcPath> <Target>
シンボリック・リンクを作成します。
【引数】
Target
リンク先。 相対パスなら基準はLinkSrcPath が入ったフォルダー
LinkSrcPath
シンボリック・リンクのリンク元のパス
参考
によるチェックがあります。
サンプル
MakeSymbolicLink_func "library.so" "library.so.1.0.0"
LinkSrcPath にリンク元がすでに存在していても上書きします。
上書きするリンク元がフォルダーをリンクしていても、そのリンク元を上書きします。
ln コマンドと、引数の順番が逆なので注意してください。
ただし、cp の方向や、ls -l で表示されるリンクの方向と同じです。
テスト
readlink_func <Path> ; <PhysicalPath>="$g_Ret"
シンボリック・リンクを含むパスから、リンクを含まない絶対パスに変換します。
【引数】
Path
パス
g_Ret
(出力)シンボリック・リンクを含まない Path。物理パスの絶対パス
サンプル
readlink_func "folder_link/file" #// folder_link -> folder
Assert_func '"$g_Ret" == "/home/user1/folder/file"'
テスト
Extract_func <PackagePath> <DstFolder> [--transform_from="<From>"]
圧縮ファイルを解凍します。
【引数】
PackagePath
圧縮ファイルのパス(*.tar.bz2, *.tar.gz, *.zip)
DstFolder
解凍してできるフォルダーのパス
テスト
フォルダーを圧縮したファイルを解凍するとき、DstFolder 引数のフォルダーの中にフォルダー
ができるのではなく、DstFolder に圧縮前の内容が解凍されます。
このとき、元のフォルダー名と違う名前に解凍することもできます。
tar cvjf pack.tar.bz2 pack
rm -r pack
Extract_func "pack.tar.bz2" "pack" #// tar xvf pack.tar.bz2 -C "." と同じ
Extract_func "pack.tar.bz2" "pack2" #// 改名することも可能
圧縮したときのフォルダー名を探すために、Extract_func の内部では、ファイルの一覧を
取得しています。 Linux では、ファイルの一覧を取得するのに、解凍するときと同じ時間が、
かかってしまうため、 tar コマンドを使って直接解凍するより Extract_func を実行する
時間は、2倍の時間がかかります。
tar コマンドと同じ時間に短縮するには、--transform_from オプションを使って、圧縮した
ときのフォルダー名を指定してください。 圧縮時にフォルダー名の前に ./ を付けたときは、
--transform_from オプションにも同様に ./ を付けてください。
From
圧縮したときのフォルダーのパス。省略時=自動判定
tar cvjf pack.tar.bz2 pack
rm -r pack
Extract_func "pack.tar.bz2" "pack" --transform_from="pack"
tar cvjf pack.tar.bz2 ./pack
rm -r pack
Extract_func "pack.tar.bz2" "pack" --transform_from="./pack"