シェルファイルの一般的な構文

参考链接:https://juejin.cn/post/7249347651787980861

シェル スクリプトは、さまざまなタスクを自動化するために使用できるコマンド言語です。スクリプトでは、パラメーターを介して情報を渡すことができるため、スクリプトはこの情報に基づいて特定の操作を実行できます。この記事では、シェルスクリプトでパラメータを渡す方法と一般的な構文を紹介します。

1. 基礎知識

1.1 通訳者

#!/bin/bash はシバンまたはシャバン、ハッシュバンと呼ばれます。これは、シャープ記号「#」と感嘆符「!」で構成される特殊文字シーケンスで、スクリプト ファイルの最初の行の先頭に配置されます。 Linux および Unix 系オペレーティング システムでは、この一連の文字は、スクリプト ファイルへのインタープリタ パスを指定するために使用されます。スクリプト ファイルの最初の行にシバンが含まれている場合、オペレーティング システムがファイルを実行するときに、パス以降のすべてのパラメータが指定されたインタープリタに渡され、スクリプトを解釈して実行できるようになります。一般的なインタープリターには、Bash シェル、Python、Perl などが含まれます。対応するパスを使用してインタープリターを指定できます。たとえば、 #!/usr/bin/python は、Python インタープリタを使用してスクリプトを実行することを意味します。

ファイルにシバン行がない場合、システムはそのファイルを実行するためにどのインタープリターを使用すればよいのかわかりません。この時点で、ファイルに実行権限 (例: 755) がある場合、システムはデフォルトのシェル インタープリタ (ほとんどの Unix/Linux システムでは、Bash シェル) を使用して、そのファイルをシェル スクリプトとして実行します。

1.2 変数の代入

等号を使用します= 値を割り当てます:
たとえば、変数名name文字列を割り当てます"hello"

name="hello"

使用$して出力変数を呼び出します。$name

1.3 条件付き if ステートメント

if ステートメントの具体的な使用方法については、https://blog.csdn.net/wxx_0124/article/details/95305625 を参照してください。

次の例は、文字列と数値の比較を示しています。
数値判定:

val = 100
if [ $val -gt 18 ]; then
    echo "Val is greater than 18"
elif [ $val -eq 18 ]; then
    echo "Val is equal to 18"
else
    echo "Val is little than 18"
fi

运行:sh run.sh
输出:

Val is greater than 18

数値判定記号:

[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
[ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
[ INT1 -gt INT2 ] INT1大于INT2返回为真 ,>
[ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>=
[ INT1 -lt INT2 ] INT1小于INT2返回为真 ,<
[ INT1 -le INT2 ] INT1小于等于INT2返回为真,<=

文字列比較:

#!/bin/bash
 
SYSTEM="Linux"
if [ $SYSTEM = "Linux" ] ; then
   echo "Linux"
elif
    [ $SYSTEM = "FreeBSD" ] ; then
   echo "FreeBSD"
elif
    [ $SYSTEM = "Solaris" ] ; then
    echo "Solaris"
else
    echo  "What?"
fi

出力:

Linux

1.4 ループステートメント

# for语句
for i in 1 2 3 4 5; do
    echo $i
done

# while语句【使用了变量】
i=0
while [ $i -lt 10 ]; do
    echo $i
    i=$((i+1))
done

1.5 関数の定義

function sayHi {
    
    
    echo "Hello, $1!"
}
sayHi "Kite"

1.6 インタラクティブな入出力

# read 命令会等待输入
echo "What's your name?"
read name
echo "Hello, $name!"

1.7 論理的判断

[ ! EXPR ] 逻辑非,如果 EXPR 是false则返回为真。
[ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。
[ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。
[ ] || [ ] 用OR来合并两个条件
[ ] && [ ] 用AND来合并两个条件
if [ $age -gt 18 ] && [ $gender == "male" ]; then
    echo "You are a man."
fi

2. パラメータの受け渡し

2.1 位置パラメータ

シェル スクリプトでは、位置パラメータを使用して情報を渡すことができます。 $1,$2,$3 などを使用して、渡された 1 番目、2 番目、および 3 番目の変数にアクセスできます。さらに、システムのデフォルト変数もあります。たとえば、 $0 content はシェル スクリプトの名前、 $# はスクリプトに渡されるパラメータの数を表し、< /span>< a i=4> は、スクリプトに渡されるすべてのパラメータのリストを表します。 ファイルの内容は次のとおりです。 $@
run.sh

#!/bin/bash
echo "The script name is $0"
echo "The first argument is $1"
echo "The second argument is $2"

执行命令:sh run.sh hello world
输出:

The script name is run.sh
The first argument is hello
The second argument is world

2.2 環境変数

シェルスクリプトでは環境変数の内容を取得したり、実行環境を確認したりできます。

#!/bin/bash
echo "The value of HOME is $HOME"
echo "The value of PATH is $JAVA_HOME"
The value of HOME is /root
The value of PATH is /usr/local/java/jdk1.8.0_241

2.3 パラメータを変数に渡す

2.3.1 getopts ショート可変トランスミッション

getopts は、Bash シェルに付属のコマンド ライン パラメータ処理ツールです。その構文は比較的単純で、-a、-b などの 1 文字のオプションの処理のみをサポートしています。 getopts は短いオプションのみを処理できます。つまり、オプションを表すために使用できる文字は 1 つだけです。また、 getopts がコマンド ライン パラメータを処理する場合、オプションとパラメータは別々に処理され、 -abc のような連続したオプションは処理できません。

#!/bin/bash
while getopts n:a:g: opt
do 
	case "${opt}" in
		n) name=${OPTARG};;
		a) age=${OPTARG};;
		g) gender=${OPTARG};;
	esac
done
echo "NameVal: $name";
echo "AgeVal: $age";
echo "GenderVal: $gender";

コマンドを実行し、パラメータを変数に渡しますnameagegender:

sh run.sh -n Kite -a 18 -g f

出力:

NameVal: Kite
AgeVal: 18
GenderVal: f

2.3.1 getopt ロング可変トランスミッション

getoptこれは GNU ツール セットのコマンド ライン パラメータ処理ツールであり、より多くのオプションと構文をサポートし、短いオプションと長いオプションを処理でき、連続したオプションも処理できます。 getopt の構文は getopts よりも複雑なので、サポートされているすべてのオプションとパラメーターを含むオプション文字列を指定する必要があります。 getopt は、解析されたオプションとパラメーターを配列に保存します。これはコード内で処理する必要があります。

getoptこのコマンドには次のパラメータがあります。

  • -o: 単一文字のオプションを指定します。オプション間に区切り文字は必要ありません。
    --long: 長いオプションを指定します。長いオプションを区切るにはカンマを使用します。
    :: 現在のオプションにパラメータ値が必要であることを示すには、オプションの後にコロンを追加します。
    --: オプションとパラメータを分割します。
    "$@": すべてのコマンド ライン パラメーターが文字列として getopt コマンドに渡されることを示します。

options=$(getopt -o n:a:g:p --long name:,age:,gender:,print -- "$@") はコマンド ライン オプションとパラメータを解析し、変換されたオプションとパラメータを変数に保存しますoptions。この変数は通常、処理のために eval コマンドに渡されます。例: eval set -- "$options"

#!/bin/bash
# 解析命令行参数
options=$(getopt -o n:a:g:p --long name:,age:,gender:,print -- "$@")
eval set -- "$options"

# 提取选项和参数
while true; do
  case $1 in 
  	-a | --age) shift; age=$1 ; shift ;;
    -n | --name) shift; name=$1 ; shift ;;
    -g | --gender) shift; gender=$1 ; shift ;;
    -p | --print) print=true; shift ;;
    --) shift ; break ;;
    *) echo "Invalid option: $1" exit 1 ;;
  esac
done

echo "NameVal: $name; AgeVal: $age; GenderVal: $gender";

実行するコマンド:

# 脚本调用(长选项)
sh run.sh --name Kite --age 18 --gender f -p
# 脚本调用(单字符选项)
sh run.sh -n Kite -a 18 -g f -p

出力:

NameVal: Kite; AgeVal: 18; GenderVal: f

Guess you like

Origin blog.csdn.net/winycg/article/details/132634856