目次
2. シェル プロンプト (PS1) とキャリッジ リターン (CR) の関係は何ですか? " >2. シェル プロンプト (PS1) とキャリッジ リターン (CR) の関係は何ですか?
4. 二重引用符 "" と単一引用符 ' の違いは何ですか? '? " >4. 二重引用符 "" と単一引用符 ' の違いは何ですか? '?
5、var=value? エクスポート前との違いは何ですか? " >5、var=value? エクスポート前との違いは何ですか?
6、exec 跟 source 差在哪?" >6、exec 跟 source 差在哪?
7、( ) 与 { } 差在哪?" >7、( ) 与 { } 差在哪?
8、$(()) 与 $() 还有 ${} 差在哪?" >8、$(()) 与 $() 还有 ${} 差在哪?
9、$@ 与 $* 区别在哪?" >9、$@ 与 $* 区别在哪?
##10. && と || の違いは何ですか? " >##10. && と || の違いは何ですか?
11、> 与 < 差在哪?" >11、> 与 < 差在哪?
12、你要if还是case呢?" >12、你要if还是case呢?
13、for what? while与until差在哪?" >13、for what? while与until差在哪?
ホームページ 運用・保守 Linuxの運用と保守 シェル スクリプトに関する古典的な 13 の質問

シェル スクリプトに関する古典的な 13 の質問

Aug 03, 2023 pm 03:03 PM
shell シェルスクリプト


シェル スクリプトに関する古典的な 13 の質問

1. なぜシェルと呼ばれるのでしょうか?

コンピュータの動作はハードウェアと切り離せないものですが、コンピュータがハードウェアを直接操作することはできず、ハードウェアのドライバは「OS(オペレーティングシステム)」と呼ばれるソフトウェアによってのみ制御されます。 .厳密に言えば、Linux はオペレーティング システム (OS) です。

ユーザーはカーネルを直接操作する方法はありませんが、カーネルの「シェル」プログラム (いわゆるシェル) を通じてカーネルと通信します。シェルは、ユーザーとシステムの間の対話型インターフェイス (インターフェイス) であり、コマンド ライン (コマンド ライン) を介して作業を完了するためにシステムのみを使用できます。したがって、シェルの最も単純な定義は次のようになります: コマンド インタープリター (コマンド インタープリター)
  • ユーザーのコマンドをカーネルに変換して処理します。

  • #同時に、カーネルの処理結果も変換します。

OS が異なれば、異なるカーネルが使用されます。同じカーネル上で、異なるシェルを使用することもできます。共通シェルには、sh、bash、csh、ksh などが含まれます。

2. シェル プロンプト (PS1) とキャリッジ リターン (CR) の関係は何ですか?

シェルターミナルへのログインに成功した後、カーソルの左側の部分をプロンプトと呼び、通常、一般ユーザーは $、管理者ユーザーは ## を使用します。 .

  • ##シェル プロンプト: コマンドを入力できます。コマンドを入力した後、CR (キャリッジ リターン) 文字が読み取られるまで待ちます

  • キャリッジ リターン: コマンドを実行できます

技術的な詳細から、シェルはIFS (Internal Field Seperator) に準拠したコマンド ライン 入力されたテキストは、「フィールド」(単語/フィールド) に分割されます。次に、特殊文字 (メタ) が最初に処理され、最後にコマンド ライン全体が再編成されます。

3. 他の人もエコーし、あなたもエコーします。あなたはエコーについてどのくらい知っていますか?

echo は引数を標準出力 (stdout) に送信します。通常は画面に「

」が表示されます。

stdin 標準入力
stdout 標準出力
stderr 標準エラー出力

echo -n  # 取消换行符
echo -e  # 启用反斜杠转译
ログイン後にコピー

4. 二重引用符 "" と単一引用符 ' の違いは何ですか? '?

  • ハード クオート: '' (一重引用符)、すべての引用符を閉じる

  • ソフト クオート: "" (二重引用符)、$ 参照を保持します

5、var=value? エクスポート前との違いは何ですか?

  • 変数定義: name=value、等号の左側と右側には区切り文字を使用できません。

  • 変数置換: echo ${name}

  • export变量:export name=value,使变量成为环境变量

# 本地变量
A=B
# 取消变量
unset A
# 环境变量export A=B
ログイン後にコピー

6、exec 跟 source 差在哪?

环境变量只能从父进程到子进程单向传递。换句话说:在子进程中环境如何变更,均不会影响父进程的环境。
当我们执行一个shell script时,其实是先产生一个sub-shell的子进程, 然后sub-shell再去产生命令行的子进程。关注Linux中文社区

# 创建子shell执行脚本
./1.sh
# 当前shell执行
source 1.sh
# 当前shell执行后退出
exec 1.sh
ログイン後にコピー

7、( ) 与 { } 差在哪?

( )将 command group 置于 sub-shell 执行
{ }则是在同一个shell内完成

8、$(()) 与 $() 还有 ${} 差在哪?

# 假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
# 我们可以用 ${ } 分别替换获得不同的值:

# 1. shell字符串的非贪婪(最小匹配)左删除
${file#*/} # 拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
# 2. shell字符串的贪婪(最大匹配)左删除
${file##*/} # 拿掉最后一条 / 及其左边的字符串:my.file.txt
${file##*.} # 拿掉最后一个 . 及其左边的字符串:txt
# 3. shell字符串的非贪婪(最小匹配)右删除:
${file%/*} # 拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%.*} # 拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
# 4. shell字符串的贪婪(最大匹配)右删除:
${file%%/*} # 拿掉第一条 / 及其右边的字符串:(空值)
${file%%.*} # 拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my

记忆的方法为:
# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配﹔两个符号是最大匹配。
ログイン後にコピー

# 5. shell字符串取子串:
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2

# 6. shell字符串变量值的替换:
${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my.file.txt

# 7. ${}还可针对变量的不同状态(没设定、空值、非空值)进行赋值:
${file-my.file.txt} :假如 $file 没有设定,则使用 my.file.txt 作传回值。(空值及非空值时不作处理) 
${file:-my.file.txt} :假如 $file 没有设定或为空值,则使用 my.file.txt 作传回值。(非空值时不作处理)
${file+my.file.txt} :假如 $file 设为空值或非空值,均使用 my.file.txt 作传回值。(没设定时不作处理)
${file:+my.file.txt} :若 $file 为非空值,则使用 my.file.txt 作传回值。(没设定及空值时不作处理)
${file=my.file.txt} :若 $file 没设定,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。(空值及非空值时不作处理)
${file:=my.file.txt} :若 $file 没设定或为空值,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。(非空值时不作处理)
${file?my.file.txt} :若 $file 没设定,则将 my.file.txt 输出至 STDERR。(空值及非空值时不作处理)
${file:?my.file.txt} :若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。(非空值时不作处理)

tips:
以上的理解在于, 你一定要分清楚 unset 与 null 及 non-null 这三种赋值状态.
一般而言, : 与 null 有关, 若不带 : 的话, null 不受影响, 若带 : 则连 null 也受影响.
ログイン後にコピー

# 8. 计算shell字符串变量的长度:${#var}
${#var} 可计算出变量值的长度:
${#file} 可得到 27 ,因为 /dir1/dir2/dir3/my.file.txt 刚好是 27 个字节...

# 9. bash数组(array)的处理方法
数组:
A=(a b c d)
引用数组:
${A[@]}
${A[*]}
访问数组成员
${A[0]}
计算数组长度
${#A[@]}
${#A[*]}
数组重新赋值
A[2]=xyz

# 10.$(( ))是用来做整数运算的 
a=5;b=7;c=2;
echo $(( a + b * c))
ログイン後にコピー

9、$@ 与 $* 区别在哪?

  • "$@"则可得到 “p1” “p2 p3” “p4” 这三个不同的词段

  • "$*"単一セグメント「p1 p2 p3 p4」の文字列全体を取得できます。

  • さらに、検索Linux のパブリック アカウントです。バックグラウンドで「git Books」と返信してサプライズ ギフト パッケージを受け取る方法を学ぶ必要があります。

##10. && と || の違いは何ですか?

1. テスト コマンドには 2 つの形式があります

  • テスト式

  • [ 式 ]

2. Bash のテストは現在 3 つのテスト オブジェクトをサポートしています

  • string: string

  • 整数:整数

  • ファイル:ファイル

3、当 expression 为真是返回 0(true) ,否则返回 非0(false)

  • command1 && command2 command2 只有在 command1 的RV为0(True)的条件下执行。

  • command1 || command2 command2只有在command1的RV为非0(False)的条件下执行。

4、先替换变量再比较

A=123[ -n "$A" ] && ([ "$A" -lt 100 ] || echo "too big")unset A
ログイン後にコピー

11、> 与 < 差在哪?

0: Standard Input(STDIN)
1: Standard Output (STDOUT)
2: Standard Error Output(STDERR)

我们可用 < 来改变读进的数据信道(stdin),使之从指定的档案读进。

我们可用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案。

ls my.file no.such.file 1> file.out 2>file.err
# 2>&1 就是将stderr并进stdout做输出
ls my.file no.such.file 1> file.out 2>&1
# /dev/null 空
ls my.file no.such.file >/dev/null 2>&1

cat < file > file
# 在 IO Redirection 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料。
# 也就是说,在上例中,> file 会先将 file 清空,然后才读进 < file , 
# 但这时候档案已经被清空了,因此就变成读不进任何数据了
ログイン後にコピー

12、你要if还是case呢?

# if
echo -n "Do you want to continue?(Yes/No):"
read YN
if [ "$YN"=Y -o "$YN"=y -o "$YN"="Yes" -o "$YN"="yes" -o "$YN"="YES"];then
echo "continue"
else
exit 0
fi

# case
echo -n "Do you want to continue?(Yes/No):"
read YN
case "$YN" in
[Yy]|[Yy][Ee][Ss])
echo "continue"
;;
*)
exit 0
esac
ログイン後にコピー

13、for what? while与until差在哪?

# for
for ((i=1;i<=10;i++))
do
echo "num is $i"
done

# while
num=1
while [ "$num" -le 10 ]; do
echo "num is $num"
num=$(($num + 1))
done

# until
num=1
until [ "$num" -gt 10 ]; do
echo "num is $num"
num=$(($nu + 1))
done
ログイン後にコピー
  • break 是结束 loop

  • return 是结束 function

  • exit 是结束 script/shell

以上がシェル スクリプトに関する古典的な 13 の質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Linuxシステムで.shファイルを実行するにはどうすればよいですか? Linuxシステムで.shファイルを実行するにはどうすればよいですか? Mar 14, 2024 pm 06:42 PM

Linuxシステムで.shファイルを実行するにはどうすればよいですか? Linux システムでは、.sh ファイルはシェル スクリプトと呼ばれるファイルであり、一連のコマンドを実行するために使用されます。 .sh ファイルの実行は非常に一般的な操作です。この記事では、Linux システムで .sh ファイルを実行する方法と具体的なコード例を紹介します。方法 1: 絶対パスを使用して .sh ファイルを実行する Linux システムで .sh ファイルを実行するには、絶対パスを使用してファイルの場所を指定できます。具体的な手順は次のとおりです。 ターミナルを開きます。

ESDファイルをISO形式に変換する方法 ESDファイルをISO形式に変換する方法 Feb 19, 2024 am 08:37 AM

esd ファイルは Windows オペレーティング システムで使用される圧縮形式であり、ISO ファイルはディスク コピーまたは仮想光学ドライブの作成に使用されるディスク イメージ ファイルです。 esd ファイルを iso ファイルに変換する必要がある場合、ISO ファイルの方が一般的に使用されており、使いやすいためかもしれません。以下では、この変換プロセスを完了するための一般的な方法をいくつか紹介します。方法 1: ESDDecrypter を使用する ESDDecrypter は、esd ファイルを復号化して iso ファイルに変換するために特別に使用されるプログラムです。

Linux でファイルの末尾の行をすばやく削除する方法 Linux でファイルの末尾の行をすばやく削除する方法 Mar 01, 2024 pm 09:36 PM

Linux システムでファイルを処理する場合、ファイルの末尾の行を削除する必要がある場合があります。この操作は実際のアプリケーションでは非常に一般的で、いくつかの簡単なコマンドで実行できます。この記事では、Linux システムでファイルの末尾の行をすばやく削除する手順と、具体的なコード例を紹介します。ステップ 1: ファイルの最終行を確認する 削除操作を実行する前に、最初にファイルの最終行がどの行であるかを確認する必要があります。ファイルの最後の行を表示するには、tail コマンドを使用できます。具体的なコマンドは次のとおりです: tail-n1filena

Linux ルート ファイル システムの秘密 Linux ルート ファイル システムの秘密 Feb 15, 2024 pm 01:42 PM

Linux は、サーバー、デスクトップ、組み込みデバイスなどのさまざまな分野で広く使用されている、オープンソースでポータブルなカスタマイズ可能なオペレーティング システムです。 Linux の中核はカーネルであり、ハードウェア リソースの管理と基本サービスの提供を担当します。ただし、カーネルは独立したエンティティではなく、さまざまなデータやプログラムを保存しアクセスするためにファイル システムを必要とします。ファイル システムは、ファイルを整理および管理する方法であり、ファイルの名前、場所、属性、権限、およびその他の情報を定義します。 Linux には、ext4、xfs、btrfs など、さまざまな種類のファイル システムがあり、それぞれに独自の特徴と利点があります。ただし、すべてのファイル システムの中に、Linux システムの基盤および中核となる特別なファイル システムがあります。

Windows 7 で Bat ファイルを実行できないのはなぜですか? Windows 7 で Bat ファイルを実行できないのはなぜですか? Feb 19, 2024 pm 03:19 PM

win7 で butt ファイルを実行できないのはなぜですか? 最近、Windows7 オペレーティング システムを使用している多くのユーザーが .bat ファイルを実行できないと報告しています。これは広範な議論と混乱を引き起こしました。正常に機能するオペレーティング システムが単純な .bat ファイルを実行できないのはなぜですか?まず、.bat ファイルの背景を理解する必要があります。バッチ ファイルとも呼ばれる .bat ファイルは、Windows コマンド インタープリタ (cmd.ex) で使用できる一連のコマンドが含まれるプレーン テキスト ファイルです。

初心者向けの Windows PowerShell スクリプト チュートリアル 初心者向けの Windows PowerShell スクリプト チュートリアル Mar 13, 2024 pm 10:55 PM

この Windows PowerShell スクリプト チュートリアルは、テクノロジ愛好家でも、スクリプト スキルの向上を目指す専門家でも、初心者向けに設計されています。 PowerShell スクリプトに関する予備知識がない場合は、この記事は基本から始めて、あなたに合わせてカスタマイズしてください。 PowerShell 環境のインストール手順をマスターし、PowerShell スクリプトの主な概念と機能を説明します。 PowerShell スクリプトについてさらに学ぶ準備ができている場合は、このエキサイティングな学習の旅に一緒に乗り出しましょう。 WindowsPowerShell とは何ですか? PowerShell は、Microsoft によって開発されたハイブリッド コマンド システムです。

PowerShell を使用してタスクを自動化する方法 PowerShell を使用してタスクを自動化する方法 Feb 20, 2024 pm 01:51 PM

IT 管理者またはテクノロジーの専門家であれば、自動化の重要性を認識している必要があります。特に Windows ユーザーにとって、Microsoft PowerShell は最高の自動化ツールの 1 つです。 Microsoft は、サードパーティのアプリケーションをインストールする必要なく、自動化のニーズに対応するさまざまなツールを提供しています。このガイドでは、PowerShell を活用してタスクを自動化する方法について詳しく説明します。 PowerShell スクリプトとは何ですか? PowerShell の使用経験がある場合は、コマンドを使用してオペレーティング システムを構成したことがあるかもしれません。スクリプトは、.ps1 ファイル内のこれらのコマンドの集合です。 .ps1 ファイルには、基本的な Get-Help など、PowerShell によって実行されるスクリプトが含まれています。

URLファイルの開き方 URLファイルの開き方 Mar 28, 2024 pm 06:27 PM

URL ファイルを使用してインターネット リソースを開く方法には、次のようなものがあります。 Web ブラウザを使用してダブルクリックして開きます。テキスト エディタで開き、リンク アドレスをコピーしてブラウザのアドレス バーに貼り付けます。コマンド ラインから、「start」または「open」コマンドを使用して URL ファイル パスを指定します。 URL ファイルを開くコマンドを含むスクリプト ファイルを作成します。

See all articles