記事ディレクトリ
1. シェル関数
シェル関数の本質は重复使用的脚本代码
、事前に記述され、指定された場所に配置され、使用時に直接呼び出すことができるコードです。
シェルの関数は、C++、Java、Python、C# などの他のプログラミング言語の関数と似ていますが、構文の詳細は異なります。
シェル関数の定義:
方法 1:
function 函数名 {
命令序列
}
方法 2:
函数名() {
命令序列
}
各部の説明:
- function: はシェルのキーワードであり、関数を定義するために特に使用されます。
- コマンド シーケンス: 関数によって実行されるコード、つまり一連のステートメントです。
- 囲まれた
{ }
部分は関数本体と呼ばれ、関数を呼び出すと実際に関数本体内のコードが実行されます。
2. 関数の戻り値
return
これは関数を終了し、$?
スクリプト内の変数を使用して表示できる終了値を返すことを意味します
。使用原則は次のとおりです。
- 1. $? 変数は最後に実行されたコマンドの終了ステータス コードのみを返すため、関数が終了するとすぐに戻り値を取得します。
- 2. 終了ステータス コードは である必要があり
0~255
、値は次の値で除算されます。256取余
例 1:
#!/bin/bash
function test01 {
read -p "请输入一个整数: " num
return $[num *2]
}
test01
echo $?
スクリプトを編集してテストする
例 2:
#!/bin/bash
function test02 {
read -p "请输入一个整数: " num
echo $[num * 2]
}
res=$(test02)
echo $res
スクリプトを編集してテストする
3. 関数パラメータの受け渡し
関数にパラメータを渡す方法
-
関数本体内の $1 $2 は、関数呼び出し時の関数に続く位置パラメータを表します。
-
関数内の$#
体内
は、関数を呼び出すときに関数に続くパラメーターの数を表します。 -
関数内の$@ $*
体内
は、関数呼び出し時に関数に続くすべてのパラメータを表します -
関数本体の $1 $2 は、スクリプト実行時のスクリプトに続く位置パラメータを表します。
-
関数内の
体外
$# は、スクリプトに続くパラメータの数を表します。 -
関数内で
体外
、 $@ はスクリプトに続くすべてのパラメータを表します
関数本体の内側か外側に関係なく、$0 はスクリプト自体を表します
sum1 () {
sum=$[$1 + $2]
echo $sum
}
read -p "最初のパラメータを入力してください:" first
read -p "2 番目のパラメータを入力してください:" Second
suml $first $second
例 1:
#!/bin/bash
sum1() {
sum=$[$1 + $2]
echo $sum
}
read -p "输入第一个传入参数: " first
read -p "输入第二个传入参数: " second
sum1 $first $second
例 2:
#!/bin/bash
// 定义函数
sum2() {
//函数体内部的$1 $2代表的是调用函数时,函数后面跟的位置参数
sum=$[$1 - $2]
echo $sum
}
//调用函数
//函数体外$1 $2代表的是执行脚本是,脚本后面跟的位置参数
sum2 $2 $1
例 3:
#!/bin/bash
sum2() {
sum=$[$1 - $2]
echo $sum
echo "在函数体内部的\$#代表调用函数时,函数后面跟的参数个数,当前函数后面有$#个参数"
echo "在函数体内部的\$@代表调用函数时,函数后面跟的所有参数,当前函数后面的参数有:$@"
echo "在函数体内部,\$0代表$0"
}
#调用函数
##函数体外的$1 $2代表的是执行脚本时,脚本后面跟的位置参数
echo "在函数体外时,\$#代表脚本后面跟的参数个数,当前脚本后面有$#个参数"
echo "在函数体外时,\$@代表脚本后面跟的所有参数,当前脚本后面参数有:$@"
echo "在函数体外,\$0代表$0"
sum2 $2 $1
~
4. 関数変数のスコープ
デフォルトでは、関数はスクリプト内のシェル環境で
のみ有効です(ソースを使用してスクリプトを実行すると、システムの現在のシェル環境にも影響します)
。関数本体内での使用に制限されます。
5. 再帰
関数が独自の関数を呼び出す
例 1:
環境変数 PATH に含まれるすべてのディレクトリとそのサブディレクトリ、およびすべての非実行可能ファイルをスクリプトを通じて出力します。
例 2:
この関数の再帰ディレクトリを定義します。
例 3:
10 進数を 2 進数に変換する関数を定義する
例 4:
IP を分割する関数を定義する