(1) 組み込みコマンド
シェル組み込みコマンドは、ファイル システム内の実行可能なスクリプト ファイルではなく、Bash シェル自体によって提供されるコマンドです。外部コマンドを実行するとディスク I/O 操作が発生するだけでなく、そのための別のプロセスをフォークする必要があるため、通常、組み込みコマンドは外部コマンドよりも高速に実行されます。コマンドを実行すると、関連するプロセスも終了します。対照的に、組み込みコマンドの実行は、現在のシェル プロセスで関数を呼び出すようなもので、追加のプロセス切り替えやコンテキスト切り替えのオーバーヘッドを回避します。 以下では、いくつかの一般的な組み込みコマンドについて詳しく説明します。
組み込みコマンドのリスト (赤で強調、覚えておく必要があります)
注文 |
説明する |
---|---|
: |
パラメータリストを展開し、リダイレクト操作を実行します |
。 |
(現在のシェル環境で) 指定されたファイル内のコマンドを読み取り、実行します。 |
エイリアス |
指定したコマンドのエイリアスを定義します |
バックグラウンド |
バックグラウンドモードでジョブを実行する |
練る |
キーボード シーケンスを readline 関数またはマクロにバインドする |
壊す |
for、while、select、または until ループを終了する |
内蔵 |
指定されたシェル組み込みコマンドを実行します。 |
発信者 |
アクティブなサブ関数呼び出しのコンテキストを返します。 |
CD |
現在のディレクトリを指定したディレクトリに変更します |
指示 |
通常のシェル検索を行わずに指定されたコマンドを実行します。 |
コンプジェン |
指定された単語に一致する可能性のある完全一致を生成します |
完了 |
指定された単語がどのように完成するかを示します |
コンポプト |
指定した単語の補完オプションを変更します |
続く |
for、while、select、または until ループの次の反復を続行します。 |
宣言する |
変数または変数の型を宣言します。 |
言う |
現在の保存ディレクトリのリストを表示する |
勘当する |
指定されたジョブをプロセス ジョブ テーブルから削除します |
エコー |
指定された文字列をSTDOUT(標準出力)に出力します。 |
有効にする |
指定した組み込みシェル コマンドを有効または無効にする |
評価 |
指定されたパラメータをコマンドに連結して、コマンドを実行します。 |
実行する |
シェルプロセスを指定されたコマンドで置き換えます。 |
出口 |
指定された終了ステータス コードでシェルを強制的に終了します。 |
輸出 |
子シェルプロセスで使用できる変数を設定する |
fc |
履歴からコマンドリストを選択 |
フロム |
フォアグラウンド モードでジョブを実行する |
取得 |
指定された位置引数を解析します |
ハッシュ |
指定されたコマンドの完全なパス名を検索して記憶します。 |
ヘルプ |
ヘルプファイルを表示する |
歴史 |
コマンド履歴を表示 |
仕事 |
アクティブなジョブをリストする |
殺す |
指定されたプロセス ID (PID) にシステム信号を送信します。 |
させて |
数式内の各パラメータを評価します |
地元 |
関数内にスコープ変数を作成する |
ログアウト |
ログインシェルを終了する |
マップファイル |
STDIN からデータ行を読み取り、インデックス配列に追加します。 |
ポップ |
ディレクトリスタックからレコードを削除する |
プリントフ |
書式設定された文字列を使用してテキストを表示する |
プッシュされた |
ディレクトリスタックにディレクトリを追加する |
障害者 |
現在の作業ディレクトリのパス名を表示します |
読む |
STDIN からデータ行を読み取り、変数に代入します。 |
配列の読み取り |
STDIN からデータ行を読み取り、インデックス配列に配置します。 |
読み取り専用 |
STDIN からデータ行を読み取り、変更不可能な変数に代入します。 |
戻る |
呼び出し元のスクリプトによって抽出できる値を使用して関数を強制的に終了します。 |
セット |
環境変数とシェルプロパティの値を設定および表示する |
シフト |
位置パラメータを順番に 1 つ下の位置に移動します |
店 |
シェルのオプションの動作を制御する変数値をオン/オフにします |
ソース |
(現在のシェル環境で) 指定されたファイル内のコマンドを読み取り、実行します。 |
つるす |
SIGCONT シグナルを受信するまでシェルの実行を一時停止します。 |
テスト |
指定された条件に基づいて終了ステータス コード 0 または 1 を返します。 |
回 |
累積したユーザー時間とシステム時間を表示する |
トラップ |
指定されたシステム信号を受信したら、指定されたコマンドを実行します |
タイプ |
指定された単語がコマンドとしてどのように解釈されるかを示します |
写植 |
変数または変数の型を宣言します。 |
減少 |
システムユーザーの指定されたリソースに上限を設定します |
umask |
新しいファイルとディレクトリのデフォルトのアクセス許可を設定する |
あなたは泣いている |
指定されたエイリアスを削除します |
設定を解除する |
指定された環境変数またはシェル属性を削除します |
待って |
指定されたプロセスが完了するのを待ち、終了ステータス コードを返します。 |
(2) 共通組み込みコマンド
タイプ
使用type
して、 コマンドが組み込みコマンドか実行可能ファイルかを判断します。< /a >
パラメータ |
説明する |
---|---|
パラメータなし |
コマンド名が外部コマンドであるか、bash 組み込みコマンドであるかを示します。 |
-t |
コマンド名の意味が次の文字で表示されます: file: 外部実行ファイルであることを示します; alias: コマンドがコマンドエイリアスで設定された名前であることを示します; buildin: コマンドが組み込みコマンド関数であることを示しますバッシュの; |
-p |
以下の実行ファイルが外部コマンドの場合は、完全なファイル名が表示されます。 |
-a |
コマンド名に関連するすべての命令は、エイリアスを含め、PATH 変数で定義されたパスにリストされます。 |
エイリアスはエイリアスを設定します
alisa
は、コマンドのエイリアスを作成するために使用されます。頻繁に操作するコマンドや複雑なコマンドにはエイリアスを設定でき、エイリアス操作により作業効率が向上するのがメリットです。このコマンドがパラメーターを受け取らない場合は、現在のシェル プロセス内のすべてのエイリアスのリストが表示されます。
文法 |
説明する |
述べる |
---|---|---|
エイリアス エイリアス = "コマンド" |
コマンドのエイリアスを定義します (alias ll="ls -l --color=auto" など)。 |
ここでは一重引用符または二重引用符を使用できます。 |
ウナリアス エイリアス |
指定されたエイリアスを削除します |
現在のシェルのエイリアスを一時的に削除します。永久に削除する場合は、構成ファイルで手動で削除する必要があります。 |
ウナリアス -a |
現在のシェル環境内のすべてを削除します |
現在のシェルのエイリアスを一時的に削除します。永久に削除する場合は、構成ファイルで手動で削除する必要があります。 |
エコー出力文字列
echo
デフォルトで最後に改行文字が追加された文字列を端末に出力するために使用されます。
文法 |
説明する |
---|---|
エコー文字列 |
改行出力、デフォルト |
echo -n 文字列 |
改行なしで出力する |
echo -e 文字列 |
エスケープ出力。エスケープ文字は通常のテキストとして出力されるのではなく、特別に処理されます。 |
echo
サポートされるエスケープ文字、-e
パラメータ内の特別に処理される記号
逃げる |
説明する |
---|---|
\a |
警告を鳴らす |
\b |
前の文字を削除する |
\c |
末尾に改行記号は追加されません。これは、echo の終了改行出力を強制的にクリアするために使用されます。 |
\f |
改行してもカーソルは元の位置に留まります |
\n |
改行するとカーソルが行の先頭に移動します。 |
\r |
カーソルは行の先頭に移動しますが、折り返されません |
\t |
タブを挿入 |
\で |
\fと同じ |
\\ |
\文字を挿入 |
\nnn |
nnn (8 進数) で表される ASCII 文字を挿入します。 |
read コンソール入力を読み取ります
read
は、標準入力からデータを読み取り、それを変数に割り当てるために使用されます。リダイレクトが実行されない場合、デフォルトでは、ユーザーが入力したデータが端末コンソールから読み取られます。リダイレクトが実行された場合は、データをファイルから読み取ることができます。
options
はオプションを表します。var
はデータの保存に使用される変数を表し、1 つ以上存在できます。 options
と var
はどちらもオプションです。変数名が指定されていない場合、読み取られたデータは環境変数 REPLY
に保存されます。変数。 $REPLY
最後の読み取りコマンドのデータを保存します。 options
サポートされているパラメータは次のとおりです:
オプション |
説明する |
---|---|
-配列 |
読み取ったデータをインデックス 0 から配列配列に割り当てます。 |
-d 区切り文字 |
読み取りの終了位置を指定するには、改行文字ではなく文字列デリミタを使用します(読み取りデータにはデリミタは含まれません)。 |
-それは |
ユーザー入力を取得する場合、ファンクション キーはコード化されており、ファンクション キーに対応する文字は直接表示されません。 |
-n かどうか |
文字行全体ではなく、num 文字を読み取ります。 |
-p プロンプト |
プロンプト情報を表示します。プロンプトの内容はプロンプトです。 |
-r |
そのまま読み取り (Raw モード)、バックスラッシュ文字はエスケープ文字として解釈されません。 |
-s |
サイレントモード(サイレントモード)では、入力した文字が画面に表示されません。パスワードやその他の確認情報を入力するときに必要です。 |
-t秒 |
タイムアウトを秒単位で設定します。ユーザーが指定された時間内に入力を完了しない場合、read は 0 以外の終了ステータスを返し、読み取りが失敗したことを示します。 |
-u fd |
リダイレクトと同様に、標準入力の代わりにファイル記述子 fd を入力ソースとして使用します。 |
出口出口
exit
用于退出当前Shell环境进程结束运行,并且可以返回一个状态码。一般使用 $?
可以获取退出状态码。
语法 |
说明 |
---|---|
exit |
正确退出,默认返回状态码0,代表命令执行成功 |
exit 非0数 |
错误退出,数字建议的范围0~255, 一般代表命令执行失败 |
exit可以结束当前Shell进程,当Shell 进程执行出错退出时,可以返回不同的状态值代表不同的错误。比如执行一个脚本文件里面操作一个文件时,可以返回1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。
declare设置变量
declare
命令可用来声明变量并设置变量的属性,也可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。
设置变量的属性
选项 |
说明 |
---|---|
+/- |
“-“可用来指定变量的属性,”+”则是取消变量所设的属性。 |
a |
array,设置为普通索引数组 |
A |
Array,设置为key-value关联数组 |
r |
readonly,将变量设置为只读, 也可以使用readonly |
x |
exprot,设置变量成为全局变量,也可以使用export |
i |
int,设置为整型变量。变量默认为字符串类型,可更改为整型declare -i sum=100+300+50 |
f |
function,设置为一个函数变量 |
test测试命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
整数比较测试
options具体如下:
参数 |
说明 |
---|---|
-eq |
等于则为真 |
-ne |
不等于则为真 |
-gt |
大于则为真 |
-ge |
大于等于则为真 |
-lt |
小于则为真 |
-le |
小于等于则为真 |
文本:
#
#!/bin/bash
这一行通常被称为"shebang"或"hash-bang",它在Unix-like系统的脚本文件中表示一个特殊的标记,用于指定执行该脚本的解释器。#!/bin/bash
num1=1 num2=1 num3=2
echo "num1=${num1},num2=${num2},num3=${num3}"
if test $num1 -eq $num2
then
echo 'num1和num2两个数相等!'
else
echo 'num1和num2两个数不相等!'
fi
if test $num2 -eq $num3
then
echo 'num2和num3两个数相等!'
else echo 'num2和num3两个数不相等!'
效果:
字符串比较测试
options具体如下:
参数 |
说明 |
---|---|
= 或 == |
等于, 等于返回0代表成功,否则返回1代表失败 |
!= |
不等于 |
\< |
小于 |
\> |
大于 |
-z 字符串 |
字符串的长度为零则为真 |
-n 字符串 |
字符串的长度不为零则为真 |
文本:
#!/bin/bash
str1="hello" str2="world" str3=""
echo "str1=${str1},str2=${str2},str3=${str3}"
if test $str1 = $str2
then
echo 'str1和str2两个字符串相等'
else
echo 'str1和str2两个字符串不相等'
fi
if test $str1 \> $str2
then
echo 'str1大于str2
'else
echo
'str1小于str2'
fi
if test -z $str2
then
echo "str2字符串长度为0"
else
echo "str2字符串长度不为0"
fi
if test -z $str3
then
echo "str3字符串长度为0"
else
echo "str3字符串长度不为0"
fi
效果:
文件测试运
options具体如下:
参数 |
说明 |
---|---|
-e 文件名 |
exists, 如果文件存在则为真 |
-r 文件名 |
read,如果文件存在且可读则为真 |
-w 文件名 |
write,如果文件存在且可写则为真 |
-x 文件名 |
execute,如果文件存在且可执行则为真 |
-s 文件名 |
string,如果文件存在且至少有一个字符则为真 |
-d 文件名 |
directory,如果文件存在且为目录则为真 |
-f 文件名 |
file,如果文件存在且为普通文件则为真 |
-c 文件名 |
character,如果文件存在且为字符型特殊文件则为真 |
-b 文件名 |
如果文件存在且为块特殊文件则为真 |
文本:
#!/bin/bash
# 检查文件是否存在且可写
if test -w ./a.sh; then
echo '文件已存在并且可写!'
else
echo '文件不存在或不可写!'
fi# 检查两个文件是否都存在
if test -e ./a.sh -a -e ./v.sh; then
echo '两个文件都存在!'
else
echo '可能有一个或两个文件不存在'
fi
演示效果: