シェルの基本
定義
シェルとは
•シェルはコマンド言語であるだけでなく、プログラミング言語でもあります。
•Linux(unix)システムへのインターフェイスを提供する環境です。
•ユーザーからの入力を受け取り、その入力に基づいてプログラムを実行し、表示します。プログラムの出力。
•ユーザーコマンド、プログラム、シェルスクリプトを実行できます。
ユーザーにとって、シェルは最も重要なユーティリティです。シェルの特性とその使用方法に関する深い理解と習熟度は、Unix / Linuxシステムを有効に活用するための鍵です。
シェル分類
•システムの種類が異なるのと同様に、シェルにはさまざまなバージョンがあり、それぞれに独自のコマンドと関数のセットがあります。
•UNIXシェルは、1970年代半ばにStephen ByrneとニュージャージーのAT&T BellLabsによって作成されました。
- Bourneシェルプロンプト$
Bourneシェルには、Bourneシェル(sh)、Kornシェル(ksh)、およびBourne AgainShellの3つのタイプがあります。
- Cシェルプロンプト%
Cシェルには、cshとtcshの2つのタイプがあります。
シェルスクリプトインタプリタ
システムのデフォルトのシェルエコーを表示する
$ SHELL
[root@single conf]# echo $SHELL
/bin/bash
bashは使いやすく無料であるため、日常業務で広く使用されています。同時に、bashはほとんどのLinuxシステムのデフォルトのシェルスクリプトインタープリターでもあります。
システムcat / etc / shellsでサポートされているシェルを表示する
[root@single conf]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
シェル仕様
- シェルスクリプトのファイル名の拡張子は.shです(例:test.sh)。
- シェルスクリプトファイルには実行権限を付与する必要があります(作成したばかりのファイルには実行権限がありません)
chmod u + x test.sh - 標準のシェルスクリプトは、最初の行でスクリプトのコンテンツを実行するために使用されるインタープリターを示します。Linuxでのこの行のプログラミングは、通常、次のとおりです。#!/ bin / bash
- シェルスクリプトの実行
方法/test.sh
コマンド
コンソール入力/出力
echo [-n] "..." 控制台输出
read VAR 控制台输入
場合:
#!/bin/bash
echo -n "please enter your name => "
read NAME
echo "your name is $NAME"
結果:
[root@single shell]# ./test.sh
please enter your name => jun
your name is jun
注釈
单行:#...
多行::<<!...!
場合:
#!/bin/bash
:<<!
echo -n "please enter your name => "
read NAME
echo "your name is $NAME"
!
echo "break"
#echo -n "hello shell"
結果:
[root@single shell]# ./test.sh
break
変数
構文形式:変数名=変数値
•数字、字母、下划线、一般字母大写
•值可以是一个数字、文本、文件名、设备或任何其他类型的数据,不可以是指针
•shell可以创建,分配和删除变量
可変型
の種類 | 意味 |
---|---|
ローカル変数 | ローカル変数はスクリプトまたはコマンドで定義され、現在のシェルインスタンスでのみ有効です。他のシェルによって開始されたプログラムはローカル変数にアクセスできません。 |
環境変数 | シェルによって開始されたプログラムを含むすべてのプログラムは環境変数にアクセスでき、一部のプログラムは通常の動作を保証するために環境変数を必要とします。setコマンドを使用して、現在の環境変数を表示できます |
シェル変数 | シェルプログラムによって設定される特別な変数。一部のシェル変数は環境変数であり、一部はローカル変数です。これらの変数は、シェルの通常の動作を保証します。 |
可変使用法
- ローカル変数
创建
NAME="henry"
AGE=18
使用
echo "$NAME,$AGE"
echo $NAME
取消
unset NAME
常量
readonly NAME
場合:
[root@single shell]# NAME="JUN"
[root@single shell]# AGE=22
[root@single shell]# echo "$NAME,$AGE"
JUN,22
[root@single shell]# unset NAME
[root@single shell]# echo "$NAME,$AGE"
,22
[root@single shell]# NAME="jun"
[root@single shell]# readonly NAME
[root@single shell]# echo $NAME
jun
[root@single shell]# NAME="kun"
-bash: NAME: readonly variable
- 環境変数
グローバル環境変数:クロスインスタンスアクセス
一時環境変数:現在のログインに有効な一時環境変数
export -p #列出所有环境变量
export -n VAR #删除环境变量VAR
export VAR #添加环境变量VAR
[root@single shell]# export -p
declare -x CLASS_PATH=".:/opt/software/jdk180/lib/tools.jar:/opt/software/jdk180/lib/dt.jar"
declare -x HADOOP_HOME="/opt/software/hadoop/hadoop260"
declare -x HBASE_HOME="/opt/software/hadoop/hbase120"
···
[root@single shell]# export jun
[root@single shell]# export -p
···
declare -x jun
[root@single shell]# export -n jun
[root@single shell]# export -p
···
- シェル変数
シンボル | 意味 |
---|---|
$$ | 現在のシェルプロセス番号 |
$ 0 | 現在のスクリプトのファイル名 |
$ n | スクリプトパラメータ |
$# | スクリプトパラメータの数 |
$ * | スクリプトパラメータの完全なセット |
$ @ | スクリプトパラメータの独立したコレクション |
$? | 前のコマンドの実行結果のステータス値または関数の戻り値:0は正常を意味し、1は失敗を意味します |
$! | 最後のバックグラウンドコマンドのプロセス番号 |
$* 和 $@ 的区别
不加"两者相同
加上"则$*代表整体,而$@代表个体