week23-shell

1. 什么是shell

命令解釋器, 用來(lái)翻譯用戶輸入的指令給內(nèi)核,內(nèi)核驅(qū)動(dòng)硬件,硬件返回給內(nèi)核,內(nèi)核面板通知

1. 1 shell 的執(zhí)行方式

  • 交互式:輸入一條,返回一條
  • 非交互式:需要執(zhí)行的命令寫入一個(gè)文件中,然后去執(zhí)行這個(gè)文件,所有任務(wù)完成

2. 什么是shell 腳本

  • 將系統(tǒng)命令堆積在一起, 順序執(zhí)行 (簡(jiǎn)稱: 系統(tǒng)命令堆積)
  • 特定的格式 + 特定的語(yǔ)法 + 系統(tǒng)的命令 = 文件 ---> shell腳本

3. shell腳本能做什么

shell可以做什么

4. 學(xué)習(xí)shell 腳本需要哪些預(yù)備知識(shí),如何才能學(xué)完shell腳本

  • 熟練使用vim編輯器
  • 熟練使用linux 命令
  • 熟練使用linux 三劍客

如果對(duì)命令使用不夠熟練,對(duì)基本服務(wù)不能手動(dòng)大劍,那么一定學(xué)不會(huì)shell

如何學(xué)好shell腳本

基礎(chǔ)命令+基礎(chǔ)服務(wù)+經(jīng)常練習(xí)+ 思路

5. shell腳本編寫規(guī)范,shell腳本執(zhí)行方式

  • 腳本存放固定目錄/scripts
  • 開(kāi)頭加#!/bin/bash 作用:告訴腳本使用的是哪種命令解釋器。如不指shell,默認(rèn)以bash執(zhí)行。
  • 附帶作者及版權(quán)信息
  • 腳本擴(kuò)展名為*.sh
  • 腳本中盡量不使用中文
  • 成對(duì)的符號(hào)一次書寫完成
  • 循環(huán)格式一次性輸入完成

6. 解釋器加與不加的區(qū)別 (# !/bin/bash)

沒(méi)有加解釋器的shell腳本
bash shell_01.sh 使用bash運(yùn)行腳本
./bash shell_01.sh 直接執(zhí)行腳本
使用bash 命令可以正常執(zhí)行
以./ 需要加權(quán)限才可以執(zhí)行腳本

. / 方式執(zhí)行,系統(tǒng)會(huì)讀取第一行聲明的解釋器,如果不加,linux系統(tǒng)默認(rèn)使用bash,如果腳本不是bash可執(zhí)行的命令,就會(huì)報(bào)錯(cuò)

Centos 6 !/bin/bash
Centos 7 !/usr/bin/bash

補(bǔ)充:如何讓Vim編輯器自動(dòng)顯示行號(hào)

vim /etc/vimrc
在最后一行加入 set number
wq 保存退出

7. Shell 腳本變量

7.1 什么是變量

變量是shell傳遞數(shù)據(jù)的方法,簡(jiǎn)單理解,就是用一個(gè)固定的字符串,表示一個(gè)不固定的值

7.2變量命名規(guī)范

變量定義時(shí)建議使用:大寫字母、小寫字母、下劃線幾個(gè)組成 {變量名最好具備一定的含義}
不要出現(xiàn)數(shù)字開(kāi)頭:
可以使用如下的方式:
HostName=
cpu_load_ava_1=1
cpu_load_ava_5=2
cpu_load_ava_15=3

注意: 等號(hào)是復(fù)制,需要注意,等號(hào)兩邊不能有空格,其次,定義的變量不要與系統(tǒng)的命令出現(xiàn)沖突

7.3 shell定義變量的方式

  • 用戶自定義變量:人為定義變量名稱

自己設(shè)定的變量

  • 系統(tǒng)環(huán)境變量:保存的是和系統(tǒng)操作

系統(tǒng)設(shè)置好的,可以直接調(diào)用

  • 位置參數(shù)變量:位置參數(shù)變量,變量名不能自定義,變量作用也是固定

  • 預(yù)定義的變量:是Bash中已經(jīng)定義好的變量,變量不能自定義,變量作用也是固定的

8. Shell 變量實(shí)踐

8.1 用戶自定義變只在當(dāng)量前shell 有效

定義變量 變量名=變量值 不能出現(xiàn) " - " 命名

當(dāng)前窗口定義一個(gè)變量
新建窗口之后變量不在有作用

想要多個(gè)窗口都讀到變量,設(shè)置為全局變量就可以想要在系統(tǒng)生效,必須寫入配置文件/etc/profile

寫入全局變量
在其他shell窗口也可以使用定義的全局變量

**8.2 **

引用變量,$變量名

var_1=a1b2
echo $var_1
a1b2

8.3 查看變量

查看變量,set顯示所有變量,包括自定義變量和環(huán)境變量

查詢剛剛設(shè)置的變量

8.4 取消變量,作用范圍:僅在當(dāng)前shell中有效

取消變量
全局變量同樣也可以臨時(shí)取消
在其他shell中依舊有效

8.5 shell中 單引號(hào)與雙引號(hào)的區(qū)別

什么時(shí)候使用雙引號(hào)

  • 字符串出現(xiàn)空格的情況需要雙引號(hào)將其作為一個(gè)整體
字符串
  • 如果內(nèi)容中有命令、變量等,會(huì)先把變量、命令解析出結(jié)果,然后輸出最終內(nèi)容。

什么時(shí)候使用單引號(hào)

  • 所見(jiàn)即所得,單引號(hào)中是什么就輸出什么
  • 單引號(hào)會(huì)解析引號(hào)中的變量

9. 系統(tǒng)環(huán)境變量

系統(tǒng)環(huán)境變量詳細(xì)解釋

系統(tǒng)環(huán)境變量是用來(lái)定義系統(tǒng)運(yùn)行環(huán)境的一些參數(shù),比如每個(gè)用戶不同的家目錄(HOME)、郵件存放位置(MAIL)等

查看系統(tǒng)環(huán)境變量
export

9.1 常見(jiàn)系統(tǒng)變量

  • 用戶的家目錄: $HOME
  • 當(dāng)前主機(jī)名是: $HOSTNAME
  • 當(dāng)前所在目錄: $PWD
  • 當(dāng)前連接信息: $SSH_CONNECTION

9.2 自定義系統(tǒng)環(huán)境變量

變量$var_3 沒(méi)有定義為系統(tǒng)環(huán)境變量時(shí)bash解釋器中無(wú)法識(shí)別

定義系統(tǒng)環(huán)境變量
查詢變量
export var_3=a1 定義系統(tǒng)環(huán)境變量 ,注意不要加上$符號(hào)

9.3 預(yù)定義變量
Bash中已經(jīng)定好的變量,名稱不能自定義,作用也是固定的

示例

$0:當(dāng)前腳本的文件名
$n:第n個(gè)參數(shù)    第0個(gè)參數(shù)為文件名稱
$#:參數(shù)個(gè)數(shù)   
$*:所有的參數(shù)   在一塊內(nèi)存中,空格間隔
$@:所有的參數(shù)  申請(qǐng)n個(gè)空間,分別存放
$?:上次命令執(zhí)行的返回值

用處
$n:在判斷用戶輸入的位置參數(shù)是什么
$#:判斷參數(shù)個(gè)數(shù)
$?:判斷命令執(zhí)行結(jié)果

判斷參數(shù)個(gè)數(shù)

$* 和 $@的區(qū)別

不加引號(hào)時(shí),二者都是返回傳入的參數(shù)
加了引號(hào)后,
    $* 把參數(shù)作為一個(gè)字符串整體(單字符串)返回
    $@ 把每個(gè)參數(shù)作為一個(gè)一個(gè)的字符串進(jìn)行返回

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,707評(píng)論 0 5
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,319評(píng)論 0 10
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,322評(píng)論 0 5
  • 計(jì)算機(jī)系統(tǒng)漫游 代碼從文本到可執(zhí)行文件的過(guò)程(c語(yǔ)言示例):預(yù)處理階段,處理 #inlcude , #defin...
    willdimagine閱讀 3,831評(píng)論 0 5
  • 觀其大綱 第1部分Linux的基礎(chǔ)知識(shí)第1章Linux概述第2章Linux系統(tǒng)的安裝KickStart開(kāi)始自動(dòng)安裝...
    周少言閱讀 1,665評(píng)論 1 10

友情鏈接更多精彩內(nèi)容