shell 語言相關(guān)

shell學(xué)習(xí)記錄

shell是什么

簡單來說,shell是一個(gè)命令解釋器,將用戶輸入的命令解釋給操作系統(tǒng)內(nèi)核。它既是命令語言又是程序設(shè)計(jì)語言。Shell 同時(shí)也是一個(gè)程序,它的一端連接著 UNIX/Linux 內(nèi)核,另一端連接著用戶和其它應(yīng)用程序;換句話說,Shell 是用戶和應(yīng)用程序與內(nèi)核溝通的橋梁。
類型:sh、bash、ash、csh(tcsh)、ksh、zch

shell的功能

  • Shell 除了能解釋用戶輸入的命令,將它傳遞給內(nèi)核,還可以:
    調(diào)用其他程序,給其他程序傳遞數(shù)據(jù)或參數(shù),并獲取程序的處理結(jié)果;
    在多個(gè)程序之間傳遞數(shù)據(jù),把一個(gè)程序的輸出作為另一個(gè)程序的輸入;
    Shell 本身也可以被其他程序調(diào)用。
  • 可以用shell做的事情: Linux 的日常管理工作,如文本或字符串檢索、文件的查找或創(chuàng)建、大規(guī)模軟件的自動(dòng)部署、更改系統(tǒng)設(shè)置、監(jiān)控服務(wù)器性能、發(fā)送報(bào)警郵件、抓取網(wǎng)頁內(nèi)容、壓縮文件等。

linux運(yùn)維工程師的工作細(xì)節(jié)

  • 安裝操作系統(tǒng),例如 CentOS、Ubuntu 等。
  • 部署代碼運(yùn)行環(huán)境,例如網(wǎng)站后臺(tái)語言采用 PHP,就需要安裝 Nginx、Apache、MySQL、PHP 運(yùn)行時(shí)等。
  • 及時(shí)修復(fù)漏洞,防止服務(wù)器被攻擊,這包括 Linux 本身漏洞以及各個(gè)軟件的漏洞。
  • 根據(jù)項(xiàng)目需求升級軟件,例如 PHP 7.0 在性能方面獲得了重大突破,如果現(xiàn)在服務(wù)器壓力比較大,就可以考慮將舊版的 PHP 5.x 升級到 PHP 7.0。
  • 監(jiān)控服務(wù)器壓力,別讓服務(wù)器宕機(jī)。例如淘寶雙十一的時(shí)候就會(huì)瞬間涌入大量用戶,導(dǎo)致部分服務(wù)器宕機(jī),網(wǎng)頁沒法訪問,甚至連支付寶都不能使用。
  • 分析日志,及時(shí)發(fā)現(xiàn)代碼或者環(huán)境的問題,通知相關(guān)人員修復(fù)。

什么是腳本

簡而言之,腳本就是可執(zhí)行的代碼 shell腳本擴(kuò)展名一般就是.sh(從上到下,逐句執(zhí)行)

shell相關(guān)操作(交互)

  • 查看當(dāng)前使用的shell:echo $SHELL
  • 查看系統(tǒng)可用的shell:cat /etc/shells
  • 編寫一個(gè)簡單腳本:
    touch 腳本名.sh
    vi 腳本名.sh

    !/bin/bash ————第一行必須以特殊注釋

    腳本內(nèi)容
    :wq或者x ————保存退出
    chmod a+x 腳本名.sh ————添加可執(zhí)行權(quán)限
    ./腳本名.sh ————執(zhí)行腳本

不想修改權(quán)限的操作:/bin/bash 腳本名.sh

  • 進(jìn)入shell的方法:
    1、進(jìn)入linux控制臺(tái) :ctrl+alt+F123456 +7切換回圖形化界面
    輸入賬戶和密碼進(jìn)入控制臺(tái)模式,然后出現(xiàn)$ (shell命令提示符)
    2、終端

對于普通用戶,Base shell 默認(rèn)的提示符是美元符號(hào)$;對于超級用戶(root 用戶),Bash Shell 默認(rèn)的提示符是井號(hào)#。該符號(hào)表示 Shell 等待輸入命令。

shell相關(guān)語法

  • 輸出命令 echo
    (未理解)Shell 通過PS1和PS2兩個(gè)環(huán)境變量來控制提示符格式:
    PS1 控制最外層命令行的提示符格式。
    PS2 控制第二層命令行的提示符格式。

  • Shell 使用以\為前導(dǎo)的特殊字符來表示命令提示符中包含的要素,這使得 PS1 和 PS2 的格式看起來可能有點(diǎn)奇怪。下表展示了可以在 PS1 和 PS2 中使用的特殊字符。

  • read輸入文件讀取鍵盤輸入

    !/bin/bash

    echo "what is your name?"
    read PERSON
    echo "Hello,$PERSON"

  • 獲取當(dāng)前進(jìn)程pid echo $$(進(jìn)程的pid一樣就是在同一個(gè)進(jìn)程)

  • source命令 強(qiáng)制執(zhí)行腳本文件中的全部命令,而忽略腳本文件的權(quán)限。
    語法:source 文件名 簡寫 . 文件名(點(diǎn)和文件名中間有個(gè)空格)
    注意:應(yīng)該是要切換到腳本所在的目錄

  • 注釋 #

變量與變量作用域

變量

  • 定義變量的三種方式
    變量名=變量值,變量名='變量值',變量名="變量值"

賦值號(hào) = 的周圍不能有空格, 值沒有空白符變量可以不用引號(hào),值有空白符一定要用引號(hào),單引號(hào)不能解釋特殊變量(原樣輸出使用),所以建議使用雙引號(hào)

  • 變量的命名規(guī)則
    變量名由數(shù)字、字母、下劃線組成;
    必須以字母或者下劃線開頭;
    不能使用 Shell 里的關(guān)鍵字(通過 help 命令可以查看保留關(guān)鍵字)。
  • 使用變量變量名的前面加上$符號(hào)即可,為了幫助解釋器識(shí)別變量邊界可以加個(gè){},推薦給所有變量加上花括號(hào){ },這是個(gè)良好的編程習(xí)慣。
  • 修改變量 ———> 對變量重新賦值即可
  • 命令賦值給變量 變量名=命令名(這是反引號(hào)) 或者 變量名=(命令名) echo變量名 => 輸出的命令執(zhí)行的內(nèi)容
  • 只讀變量 定義變量后,下一行添加readonly 變量名(值不可變)
  • 刪除變量 同只讀變量一樣 添加unset 變量名(可以選擇不去定義)

特殊變量

位置參數(shù)(與Python中的關(guān)鍵字參數(shù))與特殊參數(shù)

  • 位置參數(shù):通過$n的形式來接收的參數(shù)
  • 特殊參數(shù):0(當(dāng)前腳本文件名)#(傳給的參數(shù)個(gè)數(shù))
    *(傳遞的所有參數(shù))@(傳遞的所有參數(shù))
    $?(上個(gè)命令的退出狀態(tài),或者函數(shù)的返回值)
    $$(當(dāng)前進(jìn)程的pid)

不用雙引號(hào)時(shí)候沒有區(qū)別(都是將接收到的每個(gè)參數(shù)看做一份數(shù)據(jù),彼此之間以空格來分隔),當(dāng)它們被雙引號(hào)" "包含時(shí),就會(huì)有區(qū)別了(需要通過for循環(huán)才能看出區(qū)別):
"*"會(huì)將所有的參數(shù)從整體上看做一份數(shù)據(jù),而不是把每個(gè)參數(shù)都看做一份數(shù)據(jù)。 "@"仍然將每個(gè)參數(shù)都看作一份數(shù)據(jù),彼此之間是獨(dú)立的。
"?",所謂退出狀態(tài),就是上一個(gè)命令執(zhí)行后的返回結(jié)果。退出狀態(tài)是一個(gè)數(shù)字,一般情況下,大部分命令執(zhí)行成功會(huì)返回 0,失敗返回 1 "?",獲取函數(shù)的返回值

#!/bin/bash
#得到兩個(gè)數(shù)相加的和
function add(){
    return `expr $1 + $2`
}
add 23 50  #調(diào)用函數(shù)
echo $?  #獲取函數(shù)返回值

變量作用域

有的變量可以在當(dāng)前 Shell 會(huì)話中使用,這叫做全局變量(global variable),函數(shù)中變量名前面未加local的也是全局變量,全局變量只在當(dāng)前 Shell 會(huì)話中有效,如果使用export命令(export 變量名)將它導(dǎo)出,那么它就在所有的子 Shell 中也有效了,這稱為“環(huán)境變量”(環(huán)境變量只能向下傳遞而不能向上傳遞,即“傳子不傳父”??梢酝ㄟ^exit層層退出shell);
有的變量只能在函數(shù)內(nèi)部使用,這叫做局部變量(local variable);
而有的變量還可以在其它 Shell 中使用,這叫做環(huán)境變量(environment variable)。

如果想讓環(huán)境變量在所有 Shell 中都有效,并且能夠永久保存,在關(guān)閉 Shell 后也不丟失,那么就需要把環(huán)境變量寫入啟動(dòng)文件。

字符串

  • 字符串的定義,字符串的定義形式和變量的定義一樣
  1. 由單引號(hào)' '包圍的字符串:
    任何字符都會(huì)原樣輸出,在其中使用變量是無效的。
    字符串中不能出現(xiàn)單引號(hào),即使對單引號(hào)進(jìn)行轉(zhuǎn)義也不行。
  2. 由雙引號(hào)" "包圍的字符串:
    如果其中包含了某個(gè)變量,那么該變量會(huì)被解析(得到該變量的值),而不是原樣輸出。
    字符串中可以出現(xiàn)雙引號(hào),只要它被轉(zhuǎn)義了就行。
  3. 不被引號(hào)包圍的字符串
    不被引號(hào)包圍的字符串中出現(xiàn)變量時(shí)也會(huì)被解析,這一點(diǎn)和雙引號(hào)" "包圍的字符串一樣。
    字符串中不能出現(xiàn)空格,否則空格后邊的字符串會(huì)作為其他變量或者命令解析。
  • 獲取字符串的長度 ${#字符串名}
  • 字符串拼接(只有不加引號(hào)或者加雙引號(hào)) 兩個(gè)字符串并排放在一起就能實(shí)現(xiàn)拼接,雙引號(hào)中的變量名一定要用{}劃分邊界
  • 字符串的截取:
  1. 指定位置開始截取:
    • 字符創(chuàng)左邊開始截?。?img class="math-inline" src="https://math.jianshu.com/math?formula=%7Bstring%3A%20start%20%3Alength%7Dstring%20%E6%98%AF%E8%A6%81%E6%88%AA%E5%8F%96%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%8Cstart%20%E6%98%AF%E8%B5%B7%E5%A7%8B%E4%BD%8D%E7%BD%AE%EF%BC%88%E4%BB%8E%E5%B7%A6%E8%BE%B9%E5%BC%80%E5%A7%8B%EF%BC%8C%E4%BB%8E%200%20%E5%BC%80%E5%A7%8B%E8%AE%A1%E6%95%B0%EF%BC%89%EF%BC%8Clength%20%E6%98%AF%E8%A6%81%E6%88%AA%E5%8F%96%E7%9A%84%E9%95%BF%E5%BA%A6%EF%BC%88%E7%9C%81%E7%95%A5%E7%9A%84%E8%AF%9D%E8%A1%A8%E7%A4%BA%E7%9B%B4%E5%88%B0%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%9C%AB%E5%B0%BE%EF%BC%89%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8F%B3%E8%BE%B9%E5%BC%80%E5%A7%8B%E6%88%AA%E5%8F%96%EF%BC%9A" alt="{string: start :length}string 是要截取的字符串,start 是起始位置(從左邊開始,從 0 開始計(jì)數(shù)),length 是要截取的長度(省略的話表示直到字符串的末尾) 字符串右邊開始截?。? mathimg="1">{string: 0-start :length}

從左邊開始計(jì)數(shù)時(shí),起始數(shù)字是 0(這符合程序員思維);從右邊開始計(jì)數(shù)時(shí),起始數(shù)字是 1(這符合常人思維)。計(jì)數(shù)方向不同,起始數(shù)字也不同。
不管從哪邊開始計(jì)數(shù),截取方向都是從左到右。

  1. 制定字符開始截取
    • 使用 # 號(hào)截取右邊字符 ${string#*chars} 忽略第一個(gè)chars左邊所有字符(截取內(nèi)容不包含這個(gè)chars) 用## 匹配最后一個(gè)才會(huì)結(jié)束
    • 使用 % 號(hào)截取左邊字符 ${string%chars* } 請注意 * 的位置,因?yàn)橐厝?chars 左邊的字符,而忽略 chars 右邊的字符,所以*應(yīng)該位于 chars 的右側(cè)。
八種用法:
${string: start :length}    從 string 字符串的左邊第 start 個(gè)字符開始,向右截取 length 個(gè)字符。
${string: start}    從 string 字符串的左邊第 start 個(gè)字符開始截取,直到最后。
${string: 0-start :length}  從 string 字符串的右邊第 start 個(gè)字符開始,向右截取 length 個(gè)字符。
${string: 0-start}  從 string 字符串的右邊第 start 個(gè)字符開始截取,直到最后。
${string#*chars}    從 string 字符串第一次出現(xiàn) *chars 的位置開始,截取 *chars 右邊的所有字符。
${string##*chars}   從 string 字符串最后一次出現(xiàn) *chars 的位置開始,截取 *chars 右邊的所有字符。
${string%*chars}    從 string 字符串第一次出現(xiàn) *chars 的位置開始,截取 *chars 左邊的所有字符。
${string%%*chars}   從 string 字符串最后一次出現(xiàn) *chars 的位置開始,截取 *chars 左邊的所有字符。

數(shù)組

常用的 Bash Shell 只支持一維數(shù)組,不支持多維數(shù)組

  • 定義數(shù)組 用括號(hào)( )來表示數(shù)組,數(shù)組元素之間用空格來分隔
    數(shù)組名=(元素1 元素2 ...)
  • 獲取數(shù)組元素用:使用下標(biāo)[ ],下標(biāo)可以是一個(gè)整數(shù),也可以是一個(gè)結(jié)果為整數(shù)的表達(dá)式;當(dāng)然,下標(biāo)必須大于等于 0。${array_name[index]},使用@或*代替下標(biāo)可以獲取數(shù)組中的所有元素。
  • 添加元素:數(shù)組名[長度]=元素值,會(huì)在數(shù)組后面添加元素
  • 修改數(shù)組:數(shù)組名=([下標(biāo)]=值 ...)
  • 獲取數(shù)組長度:利用@或 * ,可以將數(shù)組擴(kuò)展成列表,然后使用#來獲取數(shù)組元素的個(gè)數(shù),格式如下:{#array_name[@]}或者{#array_name[ * ]}
  • 數(shù)組拼接:先利用@或,將數(shù)組擴(kuò)展成列表,然后再合并到一起
    array_new=({array1[@]}{array2[@]})
    array_new=({array1[*]}{array2[
    ]})
  • 刪除數(shù)組元素 unset array_name[index]
  • 刪除數(shù)組 unset array_name
  • 關(guān)聯(lián)數(shù)組 關(guān)聯(lián)數(shù)組必須使用帶有-A選項(xiàng)的 declare 命令創(chuàng)建。
    訪問關(guān)聯(lián)數(shù)組元素 array_name["index"] 獲取值$(array_name["index"])

運(yùn)算符與表達(dá)式

  • 數(shù)學(xué)運(yùn)算
shell默認(rèn)所有變量都是字符串,執(zhí)行數(shù)學(xué)計(jì)算需要用[]括起來
a=100
echo $[$a+10]
echo $[$a / 2]
echo $[$a * 2]
echo $[$a - 80]
echo $[10 % 2]

echo $((3 + 5))
echo $((10/2))
echo $((10/3))  #3 整除
echo $((10*3))
echo $((10%3))

let a=5+6
echo $a
let a+=10
echo $a

echo `expr 3 + 5`  #也可以用expr進(jìn)行計(jì)算
  • 關(guān)系運(yùn)算

    運(yùn)算符 說明 舉例
    -eq ==,相等返回 true。 [ $a -eq $b ] 返回 false。
    -ne !=,不相等返回 true。 [ $a -ne $b ] 返回 true。
    -gt >,如果是,則返回 true。 [ $a -gt $b ] 返回 false。
    -lt <,如果是,則返回 true。 [ $a -lt $b ] 返回 true。
    -ge >=,如果是,則返回 true。 [ $a -ge $b ] 返回 false。
    -le <=,如果是,則返回 true。 [ $a -le $b ] 返回 true。
  • 邏輯運(yùn)算

    運(yùn)算符 說明 舉例
    && 邏輯的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
    || 邏輯的 OR [[ a -lt 100|b -gt 100 ]] 返回 true
  • 字符串判斷

    運(yùn)算符 說明 舉例
    = 檢測兩個(gè)字符串是否相等,相等返回 true。 [$a = $b ] 返回 false。
    != 檢測兩個(gè)字符串是否相等,不相等返回 true。 [ a !=b ] 返回 true。
    -z 檢測字符串長度是否為0,為0返回 true。 [ -z $a ] 返回 false。
    -n 檢測字符串長度是否為0,不為0返回 true。 [ -n "$a" ] 返回 true。
    str 檢測字符串是否為空,不為空返回 true。 [ $a ] 返回 true。
  • 文件判斷

    操作符 說明 舉例
    -d file 檢測文件是否是目錄,如果是,則返回 true。 [ -d $file ] 返回 false。
    -f file 檢測文件是否是普通文件(既不是目錄,也不是設(shè)備文件),如果是,則返回 true。 [ -f $file ] 返回 true。
    -r file 檢測文件是否可讀,如果是,則返回 true。 [ -r $file ] 返回 true。
    -w file 檢測文件是否可寫,如果是,則返回 true。 [ -w $file ] 返回 true。
    -x file 檢測文件是否可執(zhí)行,如果是,則返回 true。 [ -x $file ] 返回 true。
    -s file 檢測文件是否為空(文件大小是否大于0),不為空返回 true。 [ -s $file ] 返回 true。
    -e file 檢測文件(包括目錄)是否存在,如果是,則返回 true。 [ -e $file ] 返回 true。

分支語句

一、單分支if語句

  1. 語法格式
    復(fù)制代碼
    if [ 條件判斷式 ]; then
    程序
    fi

或者

if [ 條件判斷式 ]
then
程序
fi

注意:中括號(hào)和條件判斷式之間必須有空格
復(fù)制代碼

  1. 示例1:判斷登陸的用戶是否是root
    復(fù)制代碼

!/bin/bash

if [ "$USER" == root ];then
echo "Login User is root"
fi

#########或者#########

!/bin/bash

if [ "$USER" == root ]
then
echo "Login User is root"
fi
復(fù)制代碼

  1. 示例2:判斷分區(qū)使用率
    復(fù)制代碼

!/bin/bash

test=(df -h | grep sda1 | awk '{print5}' | cut -d '%' -f 1)

if [ $test -ge 90 ];then
echo "Warning! /dev/sda1 is full!"
fi
復(fù)制代碼

二、雙分支if語句

  1. 語法格式
    復(fù)制代碼
    if [ 條件判斷式 ]; then
    條件成立時(shí),執(zhí)行的程序
    else
    條件不成立時(shí),執(zhí)行的程序
    fi

或者

if [ 條件判斷式 ]
then
條件成立時(shí),執(zhí)行的程序
else
條件不成立時(shí),執(zhí)行的程序
fi
復(fù)制代碼

  1. 示例1:輸入一個(gè)文件,判斷是否存在
    復(fù)制代碼

!/bin/bash

read -p "Please input a file:" file

if [ -f file ]; then echo "File:file exists!"
else
echo "File: $file not exists!"
fi
復(fù)制代碼

  1. 示例2:判斷apache服務(wù)是否啟動(dòng)了,如果沒有啟動(dòng),就代碼啟動(dòng)
    復(fù)制代碼

!/bin/bash

test=$(ps aux | grep httpd | grep -v 'grep' | wc -l)

if [ test -gt 0 ]; then echo "(date) httpd is running!"
else
echo "$(date) httpd isn't running, will be started!"
/etc/init.d/httpd start
fi
復(fù)制代碼

三、多分支if語句

  1. 語法格式
    復(fù)制代碼
    if [ 條件判斷式1 ]; then
    當(dāng)條件判斷式1成立時(shí),執(zhí)行程序1
    elif [ 條件判斷式2 ]; then
    當(dāng)條件判斷式2成立時(shí),執(zhí)行程序2
    .....省略更多條件.....
    else
    當(dāng)所有條件都不成立時(shí),最后執(zhí)行此程序
    fi
    復(fù)制代碼
  1. 示例:實(shí)現(xiàn)計(jì)算器
    復(fù)制代碼

!/bin/bash

輸入數(shù)字a,數(shù)字b和操作符

read -p "Please input number a:" a
read -p "Please input number b:" b
read -p "Please input operator[+|-|*|/]:" opt

判斷輸入內(nèi)容的正確性

testa=(echoa | sed 's/[0-9]//g')
testb=(echoa | sed 's/[0-9]//g')
testopt=(echoopt | sed 's/[+|-|*|/]//g')

if [ -n "testa" -o -n "testb" -o -n "testopt" ]; then echo "input content is error!" exit 1 elif [ "opt" == "+" ]; then
result=((a+b)) elif [ "opt" == "-" ]; then
result=((a-b)) elif [ "opt" == "" ]; then
result=((a
b)) else result=((a/b))
fi

echo "a opt b =result"
復(fù)制代碼

四、case語句
case語句和if...elif...else語句都是多分支條件語句,不過和if多分支條件語句不同的是,case語句只能判斷一種條件關(guān)系,而if語句可以判斷多種條件關(guān)系。

  1. 語法格式
    復(fù)制代碼
    case $變量名 in
    "值1")
    如果變量的值等于值1,則執(zhí)行程序1
    ;;
    "值2")
    如果變量的值等于值2,則執(zhí)行程序2
    ;;
    .....省略其他分支.....
    *)
    如果變量的值都不是以上的值,則執(zhí)行此程序
    ;;
    esac
    復(fù)制代碼
  1. 示例:判斷用戶輸入
    復(fù)制代碼

!/bin/bash

read -p "Please choose yes/no:" cmd

case $cmd in
"yes")
echo "Your choose is yes!"
;;
"no")
echo "Your choose is no!"
;;
*)
echo "Your choose is error!"
;;
esac
復(fù)制代碼

循環(huán)語句

一、for循環(huán)

  1. 語法格式1
    for 變量 in 值1 值2 值3 ...
    do
    程序
    done
    說明:程序?qū)⒈闅v所有的值,賦值給變量,然后在執(zhí)行程序。也就是說,后面接多少個(gè)值,程序就循環(huán)多少次。

  2. 示例1:遍歷5個(gè)數(shù),進(jìn)行輸出
    復(fù)制代碼

!/bin/bash

for i in 1 2 3 4 5
do
echo $i
done

輸出結(jié)果

1
2
3
4
5
復(fù)制代碼

  1. 示例2:遍歷目錄下的所有文件,進(jìn)行輸出文件名

!/bin/bash

for file in (ls) #注:ls會(huì)將當(dāng)前目錄下的所有文件列出來,然后逐個(gè)賦值給file,就可以逐個(gè)輸出了 do echofile
done

  1. 語法格式2
    for (( 初始值;循環(huán)控制條件;變量變化 ))
    do
    程序
    done

說明:這種格式和C語言for循環(huán)的格式是一樣的,區(qū)別只是需要用雙括號(hào)括住循環(huán)條件。

  1. 示例1:計(jì)算1到100的總和
    復(fù)制代碼

!/bin/bash

sum=0
for ((i=1;i<=100;i=i+1))
do
sum=((sum+i)) #同樣可以使用,sum=[sum+i]
done

echo $sum

輸出

5050
復(fù)制代碼

二、while循環(huán)

  1. 語法格式
    while [條件判斷式]
    do
    程序
    done

說明:當(dāng)條件判斷式成立時(shí),才會(huì)執(zhí)行程序,直到條件判斷式不成立時(shí),才退出循環(huán)。

  1. 示例:計(jì)算1到100的總和
    復(fù)制代碼

!/bin/bash

i=1
sum=0

while [ i -le 100 ] do sum=(( sum+i ))
i=$(( i+1 ))
done

echo $sum

輸出

5050
復(fù)制代碼

三、until循環(huán)

  1. 語法格式
    until [條件判斷式]
    do
    程序
    done

說明:until循環(huán)和while循環(huán)是相反的,當(dāng)條件判斷式不成立時(shí),才會(huì)執(zhí)行程序,直到條件判斷式成立,才退出循環(huán)。

  1. 示例:計(jì)算1到100的總和
    復(fù)制代碼

!/bin/bash

i=1
sum=0

until [ i -gt 100 ] do sum=(( sum+i ))
i=$(( i+1 ))
done

echo $sum

輸出結(jié)果

5050
復(fù)制代碼

函數(shù)(實(shí)現(xiàn)模塊化)

  • 函數(shù)的定義
    • name() {
      statements
      [return value]
      }
      -function name {
      statements
      [return value]
      }
  • 函數(shù)的調(diào)用
    直接函數(shù)名調(diào)用
    帶參數(shù):函數(shù)名 參數(shù)1 參數(shù)2 ... (參數(shù)之間空格隔開即可)
    輸出返回值 可以轉(zhuǎn)為全局變量輸出,或者用echo函數(shù)和printf命令

shell常用內(nèi)置命令

  • 別名
    添加別名 alias 命名名=‘別名’
    刪除別名 unalias 別名
  • 輸出
    echo
  • 輸入
    read [-options] [variables]
    options表示選項(xiàng),如下表所示;variables表示用來存儲(chǔ)數(shù)據(jù)的變量,可以有一個(gè),也可以有多個(gè)。
    options和variables都是可選的,如果沒有提供變量名,那么讀取的數(shù)據(jù)將存放到環(huán)境變量 REPLY 中。
  • 退出進(jìn)程
    exit
  • 設(shè)置變量屬性
    declare [+/-] [aAfFgilprtux] [變量名=變量值]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,718評論 0 5
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,339評論 0 10
  • 一,shell題記 不懂shell的程序員不是好程序員,學(xué)習(xí)shell是為了自動(dòng)化,使用自動(dòng)化可以非常有效的提高工...
    架構(gòu)師小秘圈閱讀 8,793評論 3 70
  • 《裕語言》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 28,774評論 5 20
  • 總有一天你會(huì)發(fā)現(xiàn)你害怕的不是彼此背道而馳,而是近在咫尺。 有人說,沒有希望就沒有絕望 你曾經(jīng)為了她的一言一語,一顰...
    Francie閱讀 272評論 0 0

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