任何編程語言,常用的語法和代碼結(jié)構(gòu)其實(shí)不多的,如果為了快速的掌握入手一門編程語言,我認(rèn)為只需要把該語言的常見語法和代碼記下來,再結(jié)合實(shí)際需求去拼接成新的代碼。這篇博客主要是記錄bash shell的一些用法,便于日后復(fù)習(xí)。所以這篇博客不會(huì)一次性寫完的,會(huì)不斷更新新的例子進(jìn)來。
shell不是具體哪一款程序,它是一類程序的統(tǒng)稱,這些程序只要能夠按照用戶的要求去調(diào)用操作系統(tǒng)的接口,就可以稱之為shell程序。常用shell程序有:bash, csh, tcsh, zsh等。
當(dāng)我們?cè)?a target="_blank">linux內(nèi)打開一個(gè)terminal,此時(shí)就開啟了一個(gè)shell程序供我們與操作系統(tǒng)進(jìn)行交互??梢栽O(shè)置具體是開啟了哪一款shell程序。
1. 列出當(dāng)前l(fā)inux系統(tǒng)安裝的所有shell
在terminal內(nèi)執(zhí)行:cat /etc/shells,結(jié)果如下:
linux系統(tǒng)中當(dāng)前安裝的所有shell的列表存儲(chǔ)在系統(tǒng)的/etc文件夾的"shells"文件中。默認(rèn)情況下它具有只讀權(quán)限,并且每當(dāng)我們?cè)谙到y(tǒng)中安裝新shell時(shí)都會(huì)自動(dòng)修改它。
2. 查看當(dāng)前使用的shell
在terminal內(nèi)執(zhí)行:echo $SHELL,結(jié)果如下圖:
3. 查看bash的手冊(cè)
在terminal內(nèi)執(zhí)行:man bash
4. 定義變量和使用變量
變量名不需要聲明,直接這樣寫:variable_name=variable_value。使用變量需要用$放在variable_name前就行,比如:
var="define variable"
echo $var
5. 注釋
單行注釋使用#號(hào)
多行注釋可以通過在<< COMMENT和COMMENT之間加上注釋
# echo $var
< < comment
export var
test comment
echo "somethin"
comment
6. Bash腳本第一行
Bash腳本文件的第一行必須是:#!/bin/bash。#!稱為shebang,該行的其余部分是解釋器的路徑,用于指定bash shell在操作系統(tǒng)中的位置。
She Bang(#!)是一個(gè)字符序列,由腳本開頭的符號(hào)(#)和感嘆號(hào)(!)組成。在類似Unix的操作系統(tǒng)下,當(dāng)帶有shebang的腳本作為程序運(yùn)行時(shí),程序加載器會(huì)將第一行的其余行解析為解釋器指令。因此,SheBang表示執(zhí)行腳本行的解釋器,并且它被稱為執(zhí)行各種腳本(如Bash,Python等)的路徑指令。
shebang的格式很重要,格式不正確會(huì)導(dǎo)致命令工作不正常。因此,在創(chuàng)建腳本時(shí),要始終記住SheBang格式的這兩點(diǎn):
- 它應(yīng)該始終在腳本的第一行。
- 在#!和解釋器的路徑之間,#之前不應(yīng)有任何空格。
7. 字符串和引號(hào)
Bash使用空格來確定單獨(dú)的項(xiàng)目,引號(hào)可用于處理帶有空格字符的文本。引號(hào)分為單引號(hào)和雙引號(hào)。使用簡單的文本和字符串時(shí),使用單引號(hào)和雙引號(hào)沒任何區(qū)別。但如果需要對(duì)shell變量擴(kuò)展,則只能使用雙引號(hào)。如果在單引號(hào)中使用變量,則不會(huì)將其視為變量。例子如下:
Bash script:
var="define variable"
echo "The value is $var"
echo 'The value is $var'
The result is:
The value is define variable
The value is $var
8. Bash變量
變量名可以包含字母、數(shù)字和下劃線,并且其名稱只能以字母和下劃線開頭。不能定義以任何數(shù)字開頭的變量。Bash變量不必在變量聲明時(shí)定義變量的數(shù)據(jù)類型。Bash變量是無類型的,只需通過分配其值來鍵入變量名稱,它會(huì)自動(dòng)判斷數(shù)據(jù)類型。如果將數(shù)字值分配給變量,它將自動(dòng)轉(zhuǎn)為整數(shù)工作,如果將字符值分配給該變量,則它將轉(zhuǎn)為字符串類型。
- 在讀取或打印變量時(shí),需要在變量名前加上美元($)符號(hào);
- 給變量賦值時(shí),省略美元符號(hào)($);且變量名稱和值之間的等號(hào)(=)兩側(cè)不應(yīng)有空格。
- 變量名稱區(qū)分大小寫:x和X視為兩個(gè)不同的變量;
- 變量可以放在Bash腳本中的任何地方或命令行中,因?yàn)樵谶\(yùn)行時(shí),Bash會(huì)將其替換為其分配的值;
- 不需要使用任何單引號(hào)或雙引號(hào)來定義具有單個(gè)字符串的變量。需要將多個(gè)單詞或字符串作為單個(gè)項(xiàng)輸入到變量中,需要使用引號(hào)。
例子如下:
The bash script:
var="define variable"
echo "The value is $var"
var=123456
echo "The value is $var"
var=variable
echo "The value is $var"
The result is:
The value is define variable
The value is 123456
The value is variable
9. 系統(tǒng)變量和用戶自定義變量
Shell或UNIX系統(tǒng)中都有兩種類型的變量:系統(tǒng)定義的變量和用戶定義的變量。
系統(tǒng)定義的變量是由操作系統(tǒng)本身創(chuàng)建和維護(hù)的預(yù)定義變量,通常是以大寫字母進(jìn)行定義的。要了解系統(tǒng)中有哪些系統(tǒng)變量的列表,在命令行或腳本中輸入命令:set,或env,或printenv。例子如下:
The bash script:
echo $BASH
echo $BASH_VERSION
echo $OSTYPE
The result is:
/bin/bash
4.2.46(2)-release
linux
用戶定義的變量是由用戶創(chuàng)建和維護(hù),通常這些變量以小寫形式定義,但不強(qiáng)制,也可以定義成大寫的。第8點(diǎn)已經(jīng)講過如何定義變量了,這里不說了。
10. 命令行參數(shù)
使用命令行參數(shù)可以給Bash腳本傳遞參數(shù)使腳本更具靈活性。在腳本運(yùn)行時(shí),以空格見間隔,跟在腳本名稱后面。在Bash中,以下特殊變量會(huì)記錄傳遞的參數(shù):
- $0 - 指定要調(diào)用的腳本的名稱;
- $1-$9 - 存儲(chǔ)前9個(gè)自變量的名稱,或可用作自變量的位置;
- $# - 指定傳遞給腳本的參數(shù)總數(shù)(計(jì)數(shù));
- $* - 通過將所有命令行參數(shù)連接在一起來存儲(chǔ)它們;
- $@ - 將參數(shù)列表存儲(chǔ)為數(shù)組;
- $? - 指定當(dāng)前腳本的進(jìn)程ID;
-
- 指定最后一個(gè)命令或最近執(zhí)行過程的退出狀態(tài);
- $! - 顯示最后一個(gè)后臺(tái)作業(yè)的ID;
例子如下:
The script is:
echo 'echo $0 is' $0
echo 'echo $1 is' $1
echo 'echo $2 is' $2
echo 'echo $3 is' $3
echo 'echo $4 is' $4
echo 'echo $5 is' $5
echo 'echo $6 is' $6
echo 'echo $# is' $#
echo 'echo $* is' $*
echo 'echo $@ is' $@
echo 'echo $? is' $?
echo 'echo $$ is' $$
echo 'echo $! is' $!
Run script: > >./test_bash.sh this is the first script
The result is:
echo $0 is ./test_bash.sh
echo $1 is this
echo $2 is is
echo $3 is the
echo $4 is first
echo $5 is script
echo $6 is
echo $# is 5
echo $* is this is the first script
echo $@ is this is the first script
echo $? is 0
echo $$ is 621356
echo $! is
在$@數(shù)組里的參數(shù)可以傳遞給其它數(shù)組并引用。
args=("$@")
echo ${args[0]} ${args[1]} ${args[2]} ${args[3]}
The result is:
this is the first
11. 命令替換
命令替換允許命令的輸出替換命令本身。Bash通過在子shell環(huán)境中執(zhí)行命令并用命令的標(biāo)準(zhǔn)輸出替換命令,并刪除任何尾隨的換行符。常用的命令替換語法為:
語法1:將要替換的命令放在反引號(hào)里
variable_name=`command_name`
variable_name=`command_name [option...] argument1 argument2...`
語法2:將要替換的命令放在圓括號(hào)里,且以美元符號(hào)($)開頭
variable_name=$(command_name)
variable_name=$(command_name [option...] argument1 argument2...)
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
596瀏覽量
27526 -
Shell
+關(guān)注
關(guān)注
1文章
366瀏覽量
23478 -
bash終端
+關(guān)注
關(guān)注
0文章
7瀏覽量
2013
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何在bash shell腳本中使用變量
![如何在<b class='flag-5'>bash</b> <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>中使用變量](https://file.elecfans.com/web2/M00/7F/F1/pYYBAGOJtZmAM6eLAAAWpPKp7Y4627.png)
Linux中常用的Shell腳本示例
shell腳本編寫之本地腳本的編寫和執(zhí)行
Shell腳本編程實(shí)驗(yàn)
shell腳本常用的調(diào)試方法介紹
【RT-Thread學(xué)習(xí)筆記】bash和dash-shell
![【RT-Thread學(xué)習(xí)筆記】<b class='flag-5'>bash</b>和dash-<b class='flag-5'>shell</b>](https://file.elecfans.com/web2/M00/03/FB/poYBAGDYdXCAWkKMAAAAK8RNs4s030.png)
Raspberry Pi Bash Shell 腳本簡介
![Raspberry Pi <b class='flag-5'>Bash</b> <b class='flag-5'>Shell</b> <b class='flag-5'>腳本</b>簡介](https://file.elecfans.com/web2/M00/61/2C/pYYBAGL581SAC8drAAMF_dshfhc556.png)
如何在bash shell腳本中接受參數(shù)
分享249個(gè)拿來即用的shell腳本
![分享249個(gè)拿來即用的<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>](https://file1.elecfans.com/web2/M00/8C/31/wKgaomSnfgCAfb0vAAA0YQQcU5I769.png)
BASH shell腳本篇—條件命令
![<b class='flag-5'>BASH</b> <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>篇—條件命令](https://file1.elecfans.com/web2/M00/A7/B4/wKgaomUmTNGAWilRAALFOlU78M4291.jpg)
BASH shell腳本篇—函數(shù)
BASH shell腳本篇—文件處理介紹
Shell腳本檢查工具ShellCheck介紹
![<b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>檢查工具ShellCheck介紹](https://file1.elecfans.com/web2/M00/B9/8A/wKgaomWLucKAJ0XtAAAT6zsU20o727.png)
評(píng)論