Shell程式設計入門例項

木子昭發表於2017-11-10

圖形化介面的Shell

幼兒園的小孩,可以面對圖形化介面的電腦,手持滑鼠,愉快的上網衝浪

字元型介面的Shell

計算機專業的新生面對的無介面的Linux,用vi編寫一個簡單的Hello World,都會感到吃力

什麼是Shell?

Shell是指使用者與計算機互動的介面,分為”圖形化Shell”與”字元型Shell”,個人計算機主要使用圖形化的Shell,伺服器主要使用字元型的Shell

Linux的shell可以碾壓windows的命令列

為什麼有了圖形化介面,還要使用字元型介面?

  • 對於鍵盤敲得賊6的程式設計師而言,字元型shell和圖形化shell差別不大

  • 圖形化介面會消耗更多的資源,對伺服器而言,每一分資源都非常寶貴

  • 伺服器要求穩定性高,圖形化介面更容易造成卡頓,會降低伺服器的穩定性

  • 為了極致的效能,專業的伺服器軟體,大多是沒有圖形化介面的

程式設計師眼中Shell的”三六九等”…

等級 Shell分類
第一梯隊 zsh
第二梯隊 bash, sh
第三梯隊 Windows命令列
第四梯隊 Ubuntu, Mac, Windows中的圖形化介面

Shell變數

系統變數(在系統環境中有效)

zsh,base中檢視系統變數env

不同shell-檢視系統變數

內建變數(只在特定Shell中有效)

在zsh的配置檔案.zshrc中設定 export my_name=export zhaozhaoli="把快樂放大!"

shell配置檔案變數.jpg

重啟zsh,檢視剛設定好的變數

重啟zsh,檢視剛設定好的變數

本地變數

  • 命令變數
命令變數
  • 普通變數

變數運算(100除以50等於2)

命令變數

變數佔位

變數佔位

Shell指令碼

Shell指令碼就是把命令按順序放到一起,然後一起執行.執行指令碼的直譯器就是Shell,由於bash是大多數機器的標配,所以在指令碼的首行一般加上#!/bin/base來指明bash所在的位置,同時指令碼用.sh作為字尾來表名自己的身份

  • 以求1至1000內奇數和為例
奇數和
#!/bin/bash
# 求1000以內奇數之和

# 宣告求和的值 
let sum=0
# 獲取1至1000的值並迴圈
for n in $(seq 1 1000)
do
    # 如果為奇數則執行累加操作
    if [ $((n%2)) == 1 ]
    then
        let sum=sum+n
    fi
done
echo "1至1000以內奇數之和為:${sum}"

Shell註釋

Shell註釋
#!/bin/bash
# shell指令碼註釋的第一種方式:在行前加 --> # (單行註釋)
echo "shell指令碼可以單行註釋"

:<<!
這裡是shell註釋的第二種方式!
Shell幾乎是和Unix作業系統一起誕生,第一個Unix Shell是肯·湯普遜(Ken Thompson)以Multics上的Shell為模範在1971年改寫而成,並命名Thompson sh。即便是後來流行的bash(shell的一種變體),它的年齡實際上比當前流行的所有的Linux kernel都大,可謂在Linux系統上是先有Shell再有Kernel
!
echo "shell指令碼可以多行註釋"

Shell判斷

Shell判斷
#!/bin/bash
echo "經典小程式:"
echo "---求三個數的最大值---"
read -p "請輸入第一個數:" n1
read -p "請輸入第二個數:" n2
read -p "請輸入第三個數:" n3

# 預設第一個值為最大值
let MAX=${n1}

# 將第一個值與第二個值判斷
if [ ${n2} -ge ${MAX} ]
then
    # 如果第二個值大於等於最大值則第二值為最大值
    MAX=${n2}
fi

# 將最大值與第三個值對比
if [ ${n3} -ge ${MAX} ]
then
    # 如果第三個值大於等於最大值則第三個值為最大值
    MAX=${n3}
fi
# 輸出最大值
echo "最大值為:${MAX}"

Shell迴圈

Shell迴圈
#!/bin/bash
# 暴力解高斯問題,求1至100以內的所有數和
let sum=0
for i in $(seq 1 100)
do
    sum=$((sum+i))
done
echo "1至100以內所有數和${sum}"

Shell函式

Shell函式
#!/bin/bash

# 將三個數相加
three_add(){
    let res=0
    echo "指令碼的名稱為$0"
    echo "第一個引數為$1"
    echo "第二個引數為$2"
    echo "第三個引數為$3"
    let res=$1+$2
    let res=${res}+$3
    echo "三個數之和為${res}"

}
# 呼叫函式
three_add 23 45 89


相關文章