Skip to content
Rain Hu's Workspace
Go back

[IT] Shell 筆記

Rain Hu

Reference
https://blog.csdn.net/w918589859/article/details/108752592
https://www.w3cschool.cn/linux/linux-Shell.html

一、Shell 簡介

二、 Shell 入門

1. Shell 環境


2. Bash 常用快捷鏈

快捷鏈功能
Ctrl+A把游標移動到命令行開頭。
Ctrl+E把游標移動到命令行結尾。
Ctrl+C強制終止當前的命令。
Ctrl+L清除螢幕,等於 clear 指令。
Ctrl+U清除並剪下當前命令。
Ctrl+K刪除並剪下游標以後的命令。
Ctrl+Y貼上。
Ctrl+R在歷史命令中搜索,按下 Ctrl+R 之後,就會出現搜索界面,只要輸入搜索內容,就會從歷史命令中搜索。
Ctrl+D退出當前終端機。
Ctrl+Z暫停,並放入後台。
Ctrl+S暫停螢幕輸出。
Ctrl+Q恢復螢幕輸出。

3. 輸入與輸出 I/O

[root@localhost ~]$ command > dev/null

4. 多命令順序執行

多命令執行符作用格式
;命令1;命令2多個命令順序執行,命令之間沒有任何邏輯關係。
&&命令1&&命令2當命令1正確執行,命令2才會執行;當命令1執行不正確,則命令2不會執行。
||命令1||命令2當命令1正確執行,命令2不執行;當命令1執行不正確,則命令2才會執行。

5. Shell 腳本(Shell script)

撰寫腳本

[root@localhost ~]$ vim test.sh
#!/bin/bash
echo "hello world"

執行方法

  1. 增加執行權限
[root@localhost ~]$ chmod u+x test.sh       // 對所有user增加對當前目錄下的test.sh文件的執行權限
[root@localhost ~]$ ./test.sh
  1. 通過 bash 調用執行腳本
[root@localhost ~]$ bash test.sh

三、 Shell 變數

1. 變數的命名規則

調用變數示例

[root@localhost ~]$ test=123
[root@localhost ~]$ test="$test"456
[root@localhost ~]$ echo $test
123456
[root@localhost ~]$ test=${test}789
[root@localhost ~]$ echo $test
123456789

Shell 中的特殊符號

符號作用
在單引號中所有字元都是普通字元,照原樣輸出。
""在雙引號中只有 $ 與 ` 和 \ 是有特殊含義,分別是調用變數引用命令轉義
在反引號中的內容是系統命令,在 Bash 中會先執行,與 () 作用一樣,但不推薦使用。
$()和反引號作用相同,用來引用系統命令。
()用於一串命令執行時,() 中的命令會在子 Shell 中運行。
{}用於一串命令執行時,{} 中的命令會在當前 Shell 中執行。也可以用於變數變形與替換。
[]用於變數的測試。
#用於注釋。
$用於調用變數的值。
\用於轉義。

單引號與雙引號示例

[root@localhost ~]$ name=rain
[root@localhost ~]$ echo '$name'
$name
[root@localhost ~]$ echo "$name"
rain
[root@localhost ~]$ echo `date`
2023年 1月17日 週二 21時23分45秒 CST
[root@localhost ~]$ echo '`date`'
`date`
[root@localhost ~]$ echo "`date`"
2023年 1月17日 週二 21時24分00秒 CST

反引號示例

[root@localhost ~]$ echo ls
ls
[root@localhost ~]$ echo `ls`
words.txt
[root@localhost ~]$ echo $(date)
2023年 1月17日 週二 21時28分42秒 CST

2. 變數的分類

變數分類名稱作用內容
自定義變數自定義自定義自定義
使用自定義環境變數自定義自定義自定義
系統環境變數預定預定自定義
位置參數變數預定自定義自定義
預定義變數預定自定義自定義

2.1. 自定義變數:

2.2. 環境變數:

2.3. 位置參數變數:

腳本示例1

#!/bin/sh
echo "shell's name: $0"
echo "shell's first argument: $1"
echo "shell's second argument: $2"
[root@localhost ~]$ bash test.sh 1 2
shell's name: test.sh
shell's first argument: 1
shell's second arguemnt: 2

腳本示例2

#!/bin/sh
for i in "$*"
  do
    echo "The parameter is: $i"
  done
x=1
for y in "$@"
  do
    echo "The parameter$x is: $y"
    x=$(( $x +1 ))
  done
[root@localhost ~]$ bash par.sh 1 2 3 4 5 6
The parameter is: 1 2 3 4 5 6
The parameter1 is: 1
The parameter2 is: 2
The parameter3 is: 3
The parameter4 is: 4
The parameter5 is: 5
The parameter6 is: 6

2.4. 預定義變數:

腳本示例1

[root@localhost ~]$ ls
count.sh hello.sh parameter.sh
[root@localhost ~]$ echo $?
0
[root@localhost ~]$ ls install.log
ls: install.log: No such file or directory
[root@localhost ~]$ echo $?
1

Share this post on:

Previous
[LeetCode] 926. Flip String to Monotone Increasing
Next
[LeetCode] 1519. Number of Nodes in the Sub-Tree With the Same Level