有關Linux中的bash編程講解

為何叫做shell?
在介紹 shell 是什么東西之前,不妨讓我們重新審視使用者與電腦的關系。我們知道電腦的運作不能離開硬件,但使用者卻無法直接對硬件作驅動,硬件的驅動只能透過一個稱為“操作系統(operating system)”的軟件來控管,事實上,我們每天所談的linux,嚴格來說只是一個操作系統,我們稱之為“核心(kernel)”。然而,從使用者的角度來說,使用者也沒辦法直接操作kernel,而是透過kernel的“外殼”程序,也就是所謂的shell,來與kernel溝通。
這也正是kernel跟shell的形像命名關系。

從技術角度來說,shell是一個使用者與系統的互動界面(interface),主要是讓使用者透過命令行(command line)來使用系統以完成工作。因此,shell的最簡單的定義就是—命令解釋器(Command Interpreter):

將使用者的命令翻譯給核心處理,

同時,將核心處理結果翻譯給使用者。

每次當我們完成系統登入(log in),我們就取得一個互動模式的shell,也稱為login shell或primary shell。若從行程(process)角度來說,我們在shell所下達的命令,均是shell所產生的子行程。這現像,我們暫可稱之為fork。如果是執行腳本(shell script)的話,腳本中的命令則是由另外一個非互動模式的子shell(sub shell)來執行的。也就是primary shell產生sub shell的行程,sub shell再產生script中所有命令的行程。(關于行程,我們日后有機會再補充。)

這里,我們必須知道:kernel與shell是不同的兩套軟件,而且都是可以被替換的:

不同的操作系統使用不同的kernel,

而在同一個kernel之上,也可使用不同的shell。

bash編程也叫shell編程

預定義變量??????? $? 最后一次執行的命令的返回狀態。如果這個變量的值為0,證明上一個命令正確的執行;如果這個變量返回的值非0(具體是那個數,有命令自己來決定),則證明上一個命令執行不正確。??????? $$當前進程的進程號(PID)??????? $!后臺運行的最后一個進程的進程號(PID)? 運算符??????? declare 聲名變量的類型?? ??????? declare [+/-][選項] 變量名??????? – 給變量設定類型屬性??????? + 取消變量的類型屬性??????? -i 將變量聲名為整數型??????? -x將變量什申明為環境變量??????? -p 顯示指定變量的被聲名的類型

舉例:

<p>a<span style="color: rgb(128, 128, 128)">=</span><span style="color: rgb(128, 0, 0); font-weight: bold">1</span><span style="color: rgb(0, 0, 0)">b</span><span style="color: rgb(128, 128, 128)">=</span><span style="color: rgb(128, 0, 0); font-weight: bold">2</span><span style="color: rgb(0, 0, 255)">declare</span> <span style="color: rgb(128, 128, 128)">-</span>i c <span style="color: rgb(128, 128, 128)">=</span> $a<span style="color: rgb(128, 128, 128)">+</span><span style="color: rgb(0, 0, 0)">$b  c</span><span style="color: rgb(128, 128, 128)">=</span>$(($a<span style="color: rgb(128, 128, 128)">+</span>$b))</p><p>注意用雙小括號,因為linux中認為一切皆為字符。</p><p>如果不加()當成一個命令,shell腳本中Linux命令在 $() 中運行,當然可以直接寫命令,如果則一些引用命令時 就要 $()</p>

單分支if? 條件語句

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

判斷登錄用戶是否為root用戶:

#!/bin/bash    #grep 獲取行通配符  #cut 獲取列統配符,以 = 分割 2 獲取第二列  login_name=$(env | grep LOGNAME | cut -d "=" -f 2)  #echo $login_nameif [ "$login_name" != "root" ]thenecho 'isnot root'fi

判斷根分區的占用率

#!/bin/bash  #df -h 任性話顯示磁盤的利用率  #awk 獲取第五列  #cut 對字符用 % 進行分割 獲取第一列值  result=$( df -h | grep sda1 | awk '{print  $5}'  | cut -d % -f 1)if [ "$result" -lt '90' ]thenecho 'the root dir  is not full'fi

雙分支if條件語句

if [ 條件判斷式 ]then ...else...  fi

判斷nginx 是否在運行 (最好不用包含nginx作為文件名)

#!/bin/bash  result=$(ps aux | grep nginx | grep -v grep)if [ -n "$result" ]thenecho "$(date) nginx is ok !"elseecho "$(date) nginx is not ok !"                    sudo /etc/init.d/nginx start &>/dev/nullecho "$(date) restart nginx !!"  fi

多分支if語句

if []then elif []then...else      ...if

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享