0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

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

jf_78858299 ? 來(lái)源:阿Q正磚 ? 作者:阿Q正磚 ? 2023-02-15 10:48 ? 次閱讀

1.shell腳本基礎(chǔ)

1.1 shell環(huán)境

shell分類(lèi)

Shell 編程JavaScript、php 編程一樣,只要有一個(gè)能編寫(xiě)代碼的文本編輯器和一個(gè)能解釋執(zhí)行的腳本解釋器就可以了。

Linux 的 Shell 種類(lèi)眾多,常見(jiàn)的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ……

Mac系統(tǒng)默認(rèn)的是zsh環(huán)境,ubuntu下默認(rèn)的shell環(huán)境是bash環(huán)境,可以通過(guò)執(zhí)行命令查看:

# ubuntu終端
xq@ubuntu:~$ echo $SHELL
/bin/bash


# mac電腦終端
?  ~ echo $SHELL
/bin/zsh

一般系統(tǒng)都會(huì)內(nèi)置幾種shell,可以通過(guò)命令chsh修改系統(tǒng)默認(rèn)的shell環(huán)境,在下次打開(kāi)終端生效,修改示例如下:

# 查看系統(tǒng)中已安裝的shell類(lèi)型
xq@ubuntu:~$ cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/zsh
/usr/bin/zsh


# 切換默認(rèn)的shell環(huán)境到zsh
xq@ubuntu:~$ chsh -s /bin/zsh


# 切換默認(rèn)的shell環(huán)境到bash
xq@ubuntu:~$ chsh -s /bin/bash

shell配置文件

我們開(kāi)發(fā)環(huán)境用的最多的就是bash和zsh了,下面就介紹這兩個(gè)shell為例介紹對(duì)應(yīng)的配置文件。

Bash的配置文件

  • /etc/profile:為系統(tǒng)的每個(gè)用戶(hù)設(shè)置環(huán)境信息,當(dāng)用戶(hù)第一次登錄時(shí)會(huì)執(zhí)行該文件里的命令。默認(rèn)會(huì)直接調(diào)用/etc/bashrc。該文件的改動(dòng)需要重啟才能生效。
  • /etc/bashrc:為每一個(gè)運(yùn)行bash shell的用戶(hù)執(zhí)行此文件。當(dāng)bash shell被打開(kāi)時(shí),會(huì)讀取并執(zhí)行該文件中的命令。所以修改該文件后,重新打開(kāi)Shell即可生效。
  • ~/.bash_profile:和/etc/profile類(lèi)似,但是只對(duì)當(dāng)前用戶(hù)生效。
  • ~/.bashrc:和/etc/bashrc類(lèi)似,但是只對(duì)當(dāng)前用戶(hù)生效。
  • ~/.bash_logout:當(dāng)每次退出bash shell時(shí),執(zhí)行該文件。
  • ~/.bash_history:保存了歷史命令。在Shell為Bash時(shí),每次敲擊命令時(shí),都會(huì)保存在這個(gè)文件里

加載順序:/etc/profile、/etc/bashrc、 /.bash_profile、 /.bashrc

Zsh的配置文件

  • ~/.zshenv:存放的環(huán)境變量配置項(xiàng)在任何場(chǎng)景下都能被讀取,這里通常把$PATH等變量寫(xiě)在這里,這樣無(wú)論是在交互shell,或者運(yùn)行程序都會(huì)讀取此文件。個(gè)人理解對(duì)標(biāo)Bash的profile。
  • ~/.zprofile:和.zlogin類(lèi)似,但是是在.zshrc之前加載。
  • ~/.zshrc:在交互式shell中會(huì)讀取并執(zhí)行該文件,包含設(shè)置別名、函數(shù)、選項(xiàng)、鍵綁定等命令。對(duì)標(biāo)bashrc。
  • ~/.zlogin:在login shell的時(shí)候讀取。
  • ~/.zlogout:退出終端的時(shí)候讀取,用于做一些清理工作。對(duì)標(biāo)bash_logout。
  • ~/.zsh_history:保存了歷史命令。在Shell為Zsh時(shí),每次敲擊命令時(shí),都會(huì)保存在這個(gè)文件里。

加載順序:zshenv、zprofile、zshrc、zlogin

1.2 shell腳本

由于bash腳本使用場(chǎng)景更廣泛,如android源碼build目錄中各種shell腳本,下面就以bash腳本為例進(jìn)行講述。

shell沒(méi)有官方的ide支持,可以通過(guò)vscode + shellman插件來(lái)實(shí)現(xiàn)高效編寫(xiě)。shellman插件有進(jìn)行命令與模版提示的功能。

腳本文件一般以.sh結(jié)尾(擴(kuò)展名并不影響腳本執(zhí)行),文件第一行指定運(yùn)行的shell解釋器類(lèi)型。

#! 是一個(gè)約定的標(biāo)記,它告訴系統(tǒng)這個(gè)腳本需要什么解釋器來(lái)執(zhí)行,即使用哪一種 Shell。

#!/bin/bash
echo "Hello World !"

還有一種指定shell解釋器的寫(xiě)法是通過(guò)env來(lái)聲明

#!/usr/bin/env bash
echo "Hello World !"

運(yùn)行方式

  • 作為可執(zhí)行程序

以腳本中聲明的shell解釋器運(yùn)行,示例如下:

chmod +x ./test.sh  #使腳本具有執(zhí)行權(quán)限
./test.sh  #執(zhí)行腳本

這種運(yùn)行方式是,直接運(yùn)行解釋器,其參數(shù)就是 shell 腳本的文件名,會(huì)忽略腳本中指定的解釋器信息

如:

# 以zsh解析運(yùn)行
zsh test.sh
# 以bash解析運(yùn)行
bash test.sh

調(diào)試

shell腳本不能像android studio里面可以打斷點(diǎn)方式調(diào)試,但是可以通過(guò)特定方式把執(zhí)行過(guò)程都打印出來(lái)來(lái)排查問(wèn)題。

對(duì)整個(gè)腳本加調(diào)試可以通過(guò)在指定解釋器的地方添加-x參數(shù)

#!/usr/bin/env bash -x
echo "Hello World !"

或者

bash -x test.sh

如果是針對(duì)特定的代碼塊加調(diào)試可以通過(guò)下面的方式實(shí)現(xiàn):

set -x
調(diào)試內(nèi)容
set +x

示例代碼如下:

set -x
echo "hello"
echo "world"
set +x


# 輸出結(jié)果,帶+的為執(zhí)行過(guò)程打印
+ echo hello
hello
+ echo world
world
+ set +x
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207892
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    452

    瀏覽量

    26576
  • 編輯器
    +關(guān)注

    關(guān)注

    1

    文章

    797

    瀏覽量

    30926
  • Shell腳本
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    7944
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    shell腳本進(jìn)階】幾個(gè)常用的shell進(jìn)階腳本
    的頭像 發(fā)表于 09-19 08:59 ?1724次閱讀
    【<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ì)寫(xiě)shell腳本,你就不算是一個(gè)合格的管理員。目前,很多單位在招聘Linux系統(tǒng)管理員時(shí),
    發(fā)表于 11-14 09:24 ?410次閱讀

    基礎(chǔ)知識(shí)匯總!?。?/a>

    基礎(chǔ)知識(shí)匯總!
    發(fā)表于 11-07 18:14

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

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

    shell腳本最簡(jiǎn)明的教程

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

    分散控制系統(tǒng)DCS基礎(chǔ)知識(shí)匯總文件下載

    分散控制系統(tǒng)DCS基礎(chǔ)知識(shí)匯總文件下載
    發(fā)表于 04-14 17:10 ?32次下載
    分散控制系統(tǒng)DCS<b class='flag-5'>基礎(chǔ)知識(shí)</b><b class='flag-5'>匯總</b>文件下載

    華為EMC基礎(chǔ)知識(shí)匯總資源下載

    華為EMC基礎(chǔ)知識(shí)匯總資源下載
    發(fā)表于 06-04 11:10 ?124次下載

    傳感器基礎(chǔ)知識(shí)及特性資源匯總下載

    傳感器基礎(chǔ)知識(shí)及特性資源匯總下載
    發(fā)表于 07-18 09:36 ?25次下載

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

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

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

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

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

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

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

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

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

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

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

    shell腳本是一個(gè)文件,里面存放的是特定格式的指令,系統(tǒng)可以使用腳本解析器翻譯或解析指令并執(zhí)行(無(wú)需編譯),shell腳本的本質(zhì)是
    的頭像 發(fā)表于 04-17 15:00 ?963次閱讀

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

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