シェルスクリプトの戻り値の問題を解決する
2022-02-09 02:39:45
javaやcなどの上級言語を勉強した人なら、関数の戻り値を取得したい場合、関数内にreturnを記述し、関数実行時に戻り結果を変数に代入すればよいでしょう。しかし、シェルスクリプトでは制約が多く、そのような機能を実現しようとすると、若干難しくなります。このあたりは、実際に実験してみたので、メモを共有します。
シェルスクリプトの戻り値にはreturnという引数が使えますが、returnは整数値しか返せません。そのため、シェルスクリプトはより複雑な関数に対してあまり親切ではないかもしれない。
例えば、次のような例です。
#! /bin/bash
function in_path(){
cmd=$1
path=$2
oldIFS=$IFS
IFS=":"
retval=1
for directory in $path
do
if [ -x $directory/$cmd ];then
return 0
fi
done
IFS=$oldIFS
return 1
}
in_path ls $PATH
if [ $? -eq 0 ];then
echo "yes"
else
echo "no"
fi
このスクリプトは、環境変数PATHにlsコマンドが存在し、実行可能かどうかを調べ、存在する場合は0を、存在しない場合は1を返します。0はtrueを意味し、if文はtrueならyes、0ならnoを出力します。
文字列など、他の種類の変数の値を返したい場合もあるので、シェルスクリプトではreturnキーワードを使うことができません。
#! /bin/bash
function in_path(){
cmd=$1
path=$2
oldIFS=$IFS
IFS=":"
retval=1
for directory in $path
do
if [ -x $directory/$cmd ];then
echo yes
fi
done
IFS=$oldIFS
echo no
}
aa=$(in_path $1 $PATH)
if [[ $aa =~ "yes" ]];then
echo "the path has this bianliang"
else
echo "no no no"
fi
これも戻り値の結果を取得する方法ですが、結構うまくいきますね。しかし、if文をcase文に置き換えて使うと、関数内のecho文とreturn文がこのロジックを理解するために返す、returnが違う、などということになります。
これは、シェルスクリプトの戻り値の問題についてのこの記事は終わりです、より関連するシェルスクリプトの戻り値の内容は、スクリプトハウスの過去の記事を検索してくださいまたは、次の関連記事を閲覧し続けるあなたは将来的にもっとスクリプトハウスをサポートして願っています!.
関連
-
Linux用カスタムアンチテロスクリプトのアイデアとテスト
-
シェルとsedとawkの正規表現に関するFAQ
-
シェルスクリプト暗号化ツールshcの詳細説明
-
Bashスクリプトでaliasを導入する方法
-
Shell() は整数に対する数学演算を実装しています。
-
Rsyncはすべてのバックアップツールを殺す、あなたは手動で特定のディレクトリをブロックすることができますか?
-
配列に文字列が存在するかどうかを判定するシェルサンプル実装
-
XshellとXftpの無料ダウンロードとインストールと手順(グラフィック)
-
シェルスクリプトの実践 - whileループ文
-
linux オートメーション インタラクション スクリプト 説明
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン