0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

shell腳本基礎(chǔ)知識(shí)

CHANBAEK ? 來源:嵌入式攻城獅 ? 作者:安迪西 ? 2023-04-17 15:00 ? 次閱讀

1. shell腳本基礎(chǔ)知識(shí)

shell腳本是一個(gè)文件,里面存放的是特定格式的指令,系統(tǒng)可以使用腳本解析器翻譯或解析指令并執(zhí)行(無需編譯),shell腳本的本質(zhì)是shell命令的有序集合

shell腳本編程的基本過程分為三步:

建立shell文件:包含任意多行操作系統(tǒng)命令或shell命令的文本文件

vi test.sh

賦予shell文件執(zhí)行權(quán)限:用chmod命令修改權(quán)限

chmod 740 test.sh

執(zhí)行shell文件:直接在命令行上調(diào)用shell程序

./test.sh

2. shell變量

shell允許用戶建立變量存儲(chǔ)數(shù)據(jù),但不支持?jǐn)?shù)據(jù)類型(整型、字符、浮點(diǎn)型), 任何賦給變量的值都被解釋為一串字符。

定義shell變量名時(shí),首個(gè)字符必須為字母,不能以數(shù)字開頭,中間不能有空格,可以使用下劃線,不能使用中橫線及標(biāo)點(diǎn)符號(hào)等。 shell變量分為系統(tǒng)變量、環(huán)境變量和用戶變量三種:

用戶變量:用戶自定義變量,通常使用全大寫定義變量名,方便識(shí)別; 在變量前加 $ 調(diào)用變量; 從右向左賦值; unset命令可刪除變量的賦值

COUNT=1     #通常使用全大寫定義變量名,方便識(shí)別
echo $HOME  #在變量前加 $ 調(diào)用變量
# Linux Shell/bash從右向左賦值
Y=y
X=$Y
echo $X 
y	 
#使用unset命令刪除變量的賦值 
Z=hello 
echo $Z 
hello 
unset Z 
echo $Z

系統(tǒng)變量:用于對(duì)參數(shù)判斷和命令返回值判斷時(shí)使用

$0   #當(dāng)前腳本的名稱
$n   #傳遞給腳本或函數(shù)的第n個(gè)參數(shù),n=1,2,…9
$#   #傳遞給腳本或函數(shù)的參數(shù)個(gè)數(shù)
$*   #傳遞給腳本或函數(shù)的所有參數(shù):“$1,$2,……$9” 整體傳遞
$@   #傳遞給腳本或函數(shù)的所有參數(shù):“$1”,“$2”,……“$9” 分開傳遞
$?   #命令或程序執(zhí)行完后的狀態(tài),返回0表示執(zhí)行成功
$$   #當(dāng)前腳本程序的PID號(hào)

環(huán)境變量:在程序運(yùn)行時(shí)需要設(shè)置

PATH  	    #shell搜索路徑,以冒號(hào)為分割
HOME  	    #/etc/passwd文件中列出的用戶主目錄 
SHELL 	    #當(dāng)前Shell類型
USER  	    #當(dāng)前用戶名
ID    	    #當(dāng)前用戶id信息
PWD   	    #當(dāng)前所在路徑
TERM  	    #當(dāng)前終端類型
HOSTNAME   #當(dāng)前主機(jī)名;
PS1        #定義主機(jī)命令提示符
HISTSIZE   #歷史命令大小,可通過HISTTIMEFORMAT變量設(shè)置命令執(zhí)行時(shí)間
RANDOM     #隨機(jī)生成一個(gè)0至32767的整數(shù)
HOSTNAME   #主機(jī)名

3. shell功能語句

shell腳本程序由單條或多條shell語句構(gòu)成。 shell語句包括三類:說明性語句、功能性語句和結(jié)構(gòu)性語句

說明性語句:即注釋行,以 # 號(hào)開始到該行結(jié)束,不被解釋執(zhí)行

#! /bin/sh
# 以上是告訴OS用哪種類型的shell來解釋執(zhí)行該程序

功能性語句:任意的shell命令、用戶程序或其它shell程序。 以read命令和expr命令為例

read命令:read從標(biāo)準(zhǔn)輸入讀入一行, 并賦值給后面的變量。 若標(biāo)準(zhǔn)輸入無數(shù)據(jù), 則程序在此停留等侯, 直到數(shù)據(jù)到來或被終止運(yùn)行

read  var		  #把讀入的數(shù)據(jù)全部賦給var
read  var1  var2  var3 #把讀入行中的第一個(gè)詞賦給var1,第二個(gè)賦給var2,其余所有賦給var3

expr命令:用于簡單的整數(shù)運(yùn)算,包括加(+)、減(-)、乘(*)、整除(/)和求模(%)等操作

expr 12 + 5 \\* 3        #反斜線\\去掉*號(hào)的元字符含義
27
expr 3 - 8 / 2
-1
#####
num=9
sum=`expr $num \\* 6`    #反撇號(hào)`引用命令的運(yùn)行結(jié)果
echo $sum
54

結(jié)構(gòu)性語句:根據(jù)程序的運(yùn)行狀態(tài)、輸入數(shù)據(jù)、變量的取值、控制信號(hào)以及運(yùn)行時(shí)間等因素來控制程序的運(yùn)行流程。 主要包括條件測試語句、多路分支語句、循環(huán)語句、循環(huán)控制語句和后臺(tái)執(zhí)行語句等

測試語句:test語句可測試字符串、整數(shù)和文件屬性

test "$answer" = "yes"  #變量answer的值是否為字符串yes
test $num –eq 18	  #變量num的值是否為整數(shù)18
test -d tmp    	  #測試tmp是否為一個(gè)目錄名
##### 字符串測試 ##### 
s1 = s2    #測試兩個(gè)字符串的內(nèi)容是否完全一樣
s1 != s2   #測試兩個(gè)字符串的內(nèi)容是否有差異
-z s1 	    #測試s1字符串的長度是否為0
-n s1 	    #測試s1字符串的長度是否不為0
##### 整數(shù)測試 ##### 
a -eq b    #測試a與b是否相等
a -ne b    #測試a與b是否不相等
a -gt b    #測試a是否大于b
a -ge b    #測試a是否大于等于b
a -lt b    #測試a是否小于b
a -le b    #測試a是否小于等于b
##### 文件測試 ##### 
-d name    #測試name是否為一個(gè)目錄
-e name    #測試一個(gè)文件是否存在
-f name    #測試name是否為普通文件
-L name    #測試name是否為符號(hào)鏈接
-r name    #測試name文件是否存在且為可讀
-w name    #測試name文件是否存在且為可寫
-x name    #測試name文件是否存在且為可執(zhí)行
-s name    #測試name文件是否存在且其長度不為0
f1 -nt f2  #測試文件f1是否比文件f2更新
f1 -ot f2  #測試文件f1是否比文件f2更舊

條件語句

if [condition1]; then
    ...
elif [condition2]; then
    ...
else
    ...
fi

多路分支語句

case $variable in 
  "case1")
    ......
  ;;
  "case2")
    ......
  ;;
  "case3")
    ......
  ;;
  *)
    ......
  ;;
esac

循環(huán)語句

for var in con1 con2 con3 ...
do
    ......
done
while  [condition]
do
    ......
done

循環(huán)控制語句

break	     #終止執(zhí)行所有循環(huán)
continue    #終止該次循環(huán),進(jìn)行下次循環(huán)

4. shell函數(shù)

把一個(gè)功能封裝起來,使用時(shí)直接調(diào)用函數(shù)名,模塊化,代碼可讀性強(qiáng),擴(kuò)展性方便。 shell中有兩種定義函數(shù)的語法格式:

# 若寫了function,可以省略函數(shù)名后的括號(hào)
function fname {
    ......
}
# 不寫function時(shí),函數(shù)名后需要加括號(hào)
fname() {
    ......
}

和其他編程語言不同的是,shell函數(shù)在定義時(shí)不能指明參數(shù),但在調(diào)用時(shí)卻可以傳遞參數(shù),并且給它傳遞什么參數(shù)它就接收什么參數(shù)。 當(dāng)然調(diào)用函數(shù)時(shí)也可以不傳遞參數(shù)。 函數(shù)調(diào)用方法如下:

# 不傳遞參數(shù)時(shí),直接給出函數(shù)名即可
fname
# 如果要傳遞參數(shù),多個(gè)參數(shù)之間以空格分開
fname param1 param2 param3

如下函數(shù)調(diào)用實(shí)例1:運(yùn)行腳本后,輸出www.baidu.com

#!/bin/bash
#定義函數(shù)
function url {	
    echo "www.baidu.com"
}
#調(diào)用函數(shù)
url

如下函數(shù)調(diào)用實(shí)例2:運(yùn)行腳本后,輸出傳參值之和

#!/bin/bash

#定義函數(shù):獲取參數(shù)的和
function get_sum() {
	local sum=0
    for n in $@
    do
    	((sum+=n))
    done
    return $sum
}
#調(diào)用函數(shù)并傳遞參數(shù)
get_sum 10 2 5 7 9 12 50
echo $?
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3671

    瀏覽量

    94662
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3816

    瀏覽量

    82115
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4363

    瀏覽量

    63773
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    371

    瀏覽量

    23803
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    395

    瀏覽量

    28283
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    shell腳本進(jìn)階】幾個(gè)常用的shell進(jìn)階腳本

    shell腳本進(jìn)階】幾個(gè)常用的shell進(jìn)階腳本
    的頭像 發(fā)表于 09-19 08:59 ?2113次閱讀
    【<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>進(jìn)階】幾個(gè)常用的<b class='flag-5'>shell</b>進(jìn)階<b class='flag-5'>腳本</b>

    Shell基礎(chǔ)知識(shí)(上)

    shell腳本在日常的Linux系統(tǒng)管理工作中是必不可少的。如果不會(huì)寫shell腳本,你就不算是一個(gè)合格的管理員。目前,很多單位在招聘Linux系統(tǒng)管理員時(shí),
    發(fā)表于 11-14 09:24 ?607次閱讀

    Linux Shell腳本入門到實(shí)戰(zhàn)詳解

    Linux Shell腳本入門到實(shí)戰(zhàn)詳解
    發(fā)表于 02-17 15:03 ?715次閱讀

    Linux shell腳本分享

    今天浩道跟大家分享幾個(gè)Linux運(yùn)維中常用到的shell腳本!
    發(fā)表于 07-18 09:53 ?639次閱讀
    Linux <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>分享

    Shell腳本編程實(shí)驗(yàn)

    指示燈每隔一秒交替閃亮10次按照?qǐng)D中的腳本一字一句輸入就行了,其中Shell基礎(chǔ)知識(shí)一點(diǎn)都不清楚的話多百度下吧,上面有很多相關(guān)知識(shí)。這里我就腳本
    發(fā)表于 10-22 18:25

    嵌入式和物聯(lián)網(wǎng)的shell腳本學(xué)習(xí)指南之shell腳本入門免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)技術(shù)的是嵌入式和物聯(lián)網(wǎng)的shell腳本學(xué)習(xí)指南之shell腳本入門免費(fèi)下載。
    發(fā)表于 09-11 17:15 ?20次下載
    嵌入式和物聯(lián)網(wǎng)的<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>學(xué)習(xí)指南之<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>入門免費(fèi)下載

    shell腳本最簡明的教程

    Shell腳本,就是利用Shell的命令解釋的功能,對(duì)一個(gè)純文本的文件進(jìn)行解析,然后執(zhí)行這些功能,也可以說Shell腳本就是一系列命令的集合
    的頭像 發(fā)表于 10-16 11:27 ?5028次閱讀
    <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>最簡明的教程

    109個(gè)實(shí)用shell腳本分享

    Shell腳本,就是利用Shell的命令解釋的功能,對(duì)一個(gè)純文本的文件進(jìn)行解析,然后執(zhí)行這些功能,也可以說Shell腳本就是一系列命令的集合
    的頭像 發(fā)表于 03-16 08:58 ?2807次閱讀

    Linux開發(fā)_Makefile規(guī)則與Shell腳本語言

    介紹Linux下Makefile編程知識(shí)點(diǎn),Shell腳本知識(shí)點(diǎn)。
    的頭像 發(fā)表于 09-17 15:40 ?1497次閱讀

    shell腳本基礎(chǔ)知識(shí)匯總1

    Shell 編程跟 JavaScript、php 編程一樣,只要有一個(gè)能編寫代碼的文本編輯器和一個(gè)能解釋執(zhí)行的腳本解釋器就可以了。 Linux 的 Shell 種類眾多,常見的有:
    的頭像 發(fā)表于 02-15 10:48 ?931次閱讀

    shell腳本基礎(chǔ)知識(shí)匯總2

    Shell 編程跟 JavaScript、php 編程一樣,只要有一個(gè)能編寫代碼的文本編輯器和一個(gè)能解釋執(zhí)行的腳本解釋器就可以了。 Linux 的 Shell 種類眾多,常見的有:
    的頭像 發(fā)表于 02-15 10:48 ?769次閱讀

    shell腳本基礎(chǔ)知識(shí)匯總3

    Shell 編程跟 JavaScript、php 編程一樣,只要有一個(gè)能編寫代碼的文本編輯器和一個(gè)能解釋執(zhí)行的腳本解釋器就可以了。 Linux 的 Shell 種類眾多,常見的有:
    的頭像 發(fā)表于 02-15 10:49 ?888次閱讀

    shell腳本基礎(chǔ)知識(shí)匯總4

    Shell 編程跟 JavaScript、php 編程一樣,只要有一個(gè)能編寫代碼的文本編輯器和一個(gè)能解釋執(zhí)行的腳本解釋器就可以了。 Linux 的 Shell 種類眾多,常見的有:
    的頭像 發(fā)表于 02-15 10:49 ?762次閱讀

    Linux Shell腳本經(jīng)典案例分享

    ? 作為一名 Linux 運(yùn)維工程師,會(huì)寫好的腳本不僅能提高工作效率,還能有更多的時(shí)間做自己的事。最近在網(wǎng)上沖浪的時(shí)候,發(fā)現(xiàn)大家對(duì)Shell腳本都有“心結(jié)”,要么覺得自己寫出來不好看,要么根本無從下手。 下面分享249個(gè)真實(shí)
    發(fā)表于 06-16 14:03 ?747次閱讀
    Linux <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>經(jīng)典案例分享

    樹莓派新手必看!在樹莓派上編寫和運(yùn)行 Shell 腳本

    在本教程中,我將討論Shell腳本基礎(chǔ)知識(shí)、它們的用途以及如何在RaspberryPi上編寫和運(yùn)行Shell腳本。什么是
    的頭像 發(fā)表于 03-25 09:28 ?155次閱讀
    樹莓派新手必看!在樹莓派上編寫和運(yùn)行 <b class='flag-5'>Shell</b> <b class='flag-5'>腳本</b>!

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品