科技知識動態:Linux基礎之shell編程基礎

導讀跟大家講解下有關Linux基礎之shell編程基礎,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說Linux基礎之shell編程基礎,小編

跟大家講解下有關Linux基礎之shell編程基礎,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說Linux基礎之shell編程基礎,小編也收集到了有關Linux基礎之shell編程基礎的相關資料,希望大家看到了會喜歡。

概述

Shell的概念是源自Unix的命令解釋器。Shell不僅可解釋用戶輸入的命令,同時,可解釋執行基于命令的腳本語言。使用shell腳本能提高用戶操作和管理員進行系統管理的效率。shell腳本擅長處理純文本類型的數據,而Linux中幾乎所有的配置文件、日志都是純文本類型。

如何編寫shell腳本腳本書寫規范1.腳本統一存放目錄 2.選擇解釋器, 開頭要寫#! XXX,內核根據#!后的解釋器來確定用哪個解釋器解釋腳本內容3.編輯腳本使用vim, 配置~/.vimrc方便個人書寫習慣 4.文件名規范,結尾以sh結束shell的基本元素1.#!/bin/bash 必須的,指出shell的類型2.# 注釋。在shell中,注釋寫在#之后,#之后的內容不會執行3.變量 4.控制 循環分支shell中的特殊符號1.#! 注明執行腳本采用的shell2.$ 變量符。與反斜杠轉義符相反,使其后的普通字符作為變量名,如$a表示變量a的值。變量字符長度超過1個時,用{}括起來3.單引號。被引起的字符全部做普通字符,即全部原樣echo 'my $SHELL'4.雙引號引號內的內容,除$、轉義符\、倒引號`這三個保留特殊功能,其他字符均做普通字符。5.倒引號(數字1鍵旁邊的那個鍵)引號內的字符串當做shell命令行解釋執行(同樣的功能也可以使用$()來使用),得到的結果取代整個倒引號括起來的部分。6.反斜線反斜線是轉義字符,它能把特殊字符變成普通字符。在某個字符前面利用反斜杠(\)能夠阻止shell把后面的字符解釋為特殊字符。7.* 代表0個或者多個特殊字符例子 yum.* 代表的可以使yum.也可以是yum.a、yum.ab、yum.abc 當然小數點后面可以有多個字母8.? 代表的是任意一個字符例子 yum.? 可以是yum.a yum.b yum.c,但是要注意小數點后面必須有任意一個字符9.[] 代表的是中括號中的任意一個[abcdef] 可以是a b c d e f 中的任意一個字母當然也可以是數字[-]代表的是一個范圍[a-z] 表示的是字母a到z之間的所有字母[^]^是反向選擇符號從字面意思可以知道也就是非的意思[^abc]表示只要不a b c 這三個字符中的任意一個就選擇10.$( )可以將命令替換輸出賦值給變量11.{}通過括號擴展可以生成需要的字串,括號中可以包含連續的序列或使用逗號分隔的多個項目,連續的序列包括一個起點和一個終點user@computer: ~$ echo {a,b,c} a b cuser@computer: ~$ echo user{1,5,8}user1 user5 user8user@computer: ~$ echo {0..10}0 1 2 3 4 5 6 7 8 9 10user@computer: ~$ mkdir {dir1,dir2,dir3}user@computer: ~$ ls –ld dir{1,2,3}變量

shell變量可以保存路徑名、文件名或者一個數字等。分為三類:

本地變量: (局部變量)只在創建它們的Shell中使用,可以在shell程序內任意使用和修改它們。環境變量: 可以在創建它們的Shell及其派生出來的任意子程序中使用。有些變量是用戶創建的,其他的則是專用的(比如PATH、HOME)。是系統環境的一部分,不必去定義它們,可以在shell程序中使用它們 。還能在shell中加以修改。內部變量: 由系統提供的。與環境變量不同,用戶不能修改它們。本地變量本地變量 在用戶現在的shell生命期的腳本中使用 變量名=值1.等號兩邊不可以有空格2.取值包含空格,必須用雙引號括起來3.Shell變量可以用大小寫字母,區分大小寫變量是弱類型的, 不用聲明類型# 變量聲明及賦值格式變量=值(等號兩邊不能有空格)# 變量的引用 $變量名 ${變量名} 變量名為1個字符時建議使用方式一,多余一個字符時建議使用方式二 舉例: $a ${abc}# 清除變量unset 變量名user@computer: ~$ name=Jackuser@computer: ~$ echo ${name}user@computer: ~$ unset name # 注意,name前沒有$# 設置只讀變量設置變量時,不想再改變其值,可以將之設為只讀變量 變量名=值 readonly 變量名環境變量

Bash預設了很多環境變量,實際使用中,可以直接調用這些變量。環境變量可以用于所有子程序,著包括編輯器、腳本和應用

內置環境變量

HOME: 代表使用者的家目錄。cd ~ 去到使用者的家目錄 或者利用 cd 就可以直接回到使用者家目錄了。SHELL: 目前這個環境使用的 SHELL 是哪個程序? 如果是 bash 的話,預設是 /bin/bashPWD:用戶當前工作目錄的路徑。它指出用戶目前在Linux文件系統中處在什么位置。它是由Linux自動設置的HISTSIZE: 這個與“歷史命令”有關,曾經下達過的指令可以被系統記錄下來,而記錄的“數目”則是由這個值來設定的。 PATH: 就是執行文件搜尋的路徑,目錄與目錄中間以冒號(:)分隔, 由于文件的搜尋是依序由PATH的變量內的目錄來查詢,所以,目錄的順序也很重要。環境變量可以在命令行中設置,但用戶注銷時這些值將丟失 環境變量均為大寫 必須用export命令導出# 設置環境變量 variable-name=valueexport variable-name(環境變量名大寫)# 顯示環境變量env 可以看到所有的環境變量echo $環境變量名 (顯示一個變量)# 清除環境變量unset 環境變量名

修改path環境變量

修改PATH環境變量,使腳本不用加路徑,直接輸入文件名字即可執行。# 命令行修改環境變量以下在用戶user主目錄下操作:mkdir shdir && cd shdirvi hellochmod 755 hellocd ~export PATH=$PATH:$HOME/shdir在任何目錄下,輸入hello即可執行該文件。本方式下環境變量如果修改錯了,exit退出后重新登陸即可恢復系統默認的值。

配置文件中修改環境變量

注意,修改環境變量前最好先備份一下舊的:export tem=$PATHecho $tem >>pathbake需要知道環境變量與哪些配置文件有關:不同發行版會有不同,但命名還是有通性的:find / -name “*profile”find / -name “*bashrc”全局配置文件/etc/profile本地配置文件~/.bashrc內部變量

內部變量是Linux所提供的一種特殊類型的變量,這類變量在程序中用來作出判斷。在shell程序內這類變量的值是不能修改的。

部分內部變量是:$# 傳送給shell程序的位置參數的數量$? 最后命令的完成碼或者在shell程序內部執行的shell程序(返回值)$0 shell程序的名稱$* 調用shell程序時所傳送的全部參數的單字符串,"參數1", "參數2"…形式保存的參數$@ "參數1", "參數2"…形式保存的參數$n 第n個參數$$ 本程序的PID$! 上一個命令的PID輸入與輸出# read 從鍵盤上讀取變量的值read [選項] 變量名列表 常用選項 -a ANAME 將輸入讀入ANAME的數組 -n NCHARS 讀入N個字符 -p PROMPT 顯示一個提示 -r 取消轉移 -s 安靜模式,輸入的字符將不會提示 -t TIMEOUT 超過指定時間,read自動停止 # echo 顯示字符串或變量的值echo [選項] 字符串 常用選項 -n 不在最后自動換行 -e 啟用反斜線控制字符的轉換 -E 不處理轉義字符。此為缺省選項;#! /bin/bash# 輸入一句話,打印輸入的話read -p 'please type some words, I will print them: ' wordsecho $words條件測試# testtest 條件表達式如果測試條件為真,test命令會返回0,否則返回一個非0的數值test 語句與if/then和case語句一起,構成shell編程的控制轉移結構# [][ 條件表達式 ]方括號的內側兩邊各需一個空格條件表達式的值為真返回零,為假時返回非零值文件狀態判斷條件語句真假-d filename若文件filename為目錄文件,則返回真-f filename文件是否存在且為普通文件,則返回真-r filename若文件filename可讀,則返回真-s filename若文件filename的長度大于0,則返回真-w filename若文件filename可寫,則返回真-x filename若文件filename可執行,則返回真-e filename文件是否存在#! /bin/bash# 輸入文件的絕對路徑,判斷文件是否存在read -p 'input file path: ' fileif [ -e $file ] then echo '文件存在'else echo '文件不存在'fi條件語句if [ 條件表達式 ] then 命令序列1else 命令序列2fi當"條件表達式"的測試值為真時,執行"命令序列1",否則,執行"命令序列2"。命令序列中的命令可以是一個或者多個。if [ 條件表達式 ]; then 命令序列fi當"條件表達式"的測試值為真時,執行"命令序列",否則,執行條件語句后面的命令。條件表達式與then之間的分號";"起命令分隔符的作用。語法形式三if test 條件表達式1 then 命令序列1elif [ 條件表達式2 ] then 命令序列2else 命令序列3fi這是包含二層嵌套的條件語句,當"條件表達式1"為真時,執行"命令序列1",否則,在"條件表達式2"為真的情況下,執行"命令序列2",否則,執行"命令序列3","命令序列3"屬于第2個條件語句的一部分。

#! /bin/bash# 判斷輸入的路徑是文件還是目錄read -p 'please input the file path: ' fileif [ -d $file ] then echo 'this is a directory'elif [ -f $file ] then echo 'this is a file'else echo 'wrong file type, or the file do not exist'fi

操作符含義n1 –eq n2判斷數字n1與n2是否相等,若相等,返回0,否則,返回1n1 –ne n2判斷數字n1與n2是否不等,若不等,返回0,否則,返回1n1 –lt n2判斷數字n1是否小于n2,若是,返回0,否則,返回1n1 –gt n2判斷數字n1是否大于n2,若是,返回0,否則,返回1n1 –le n2判斷數字n1是否小于或等于n2,若是,返回0,否則,返回1n1 –ge n2判斷數字n1是否大于或等于n2,若是,返回0,否則,返回1字符串操作符操作符含義string若字符串string非空,則返回真-n string若字符串string長度大于0,則返回真-z string若字符串string長度為0,則為返回真string1 = string2若字符串string1和string2相等,則返回真string1 != string2若字符串string1和 string2不等,則返回真邏輯操作符操作符含義e1 –a e2邏輯表達式e1和e2同時為真時,返回0,否則,返回1e1 –o e2邏輯表達式e1和e2有一個為真時,返回0,否則,返回1! e1若邏輯表達式e1不為真時,返回0,,否則,返回1循環語句for 變量名 in 參數列表 do 命令列表done將"參數列表"中的元素依次賦給"變量名",在每次賦值后執行"命令列表","參數列表"表示"變量名"的取值范圍for ((初始化變量值;結束循環條件;運算)) do 命令序列donewhile [ 條件表達式 ] do 命令列表done循環執行"命令列表"中的命令,直至"條件表達式"的值為假。Until [ 條件 ] do 命令序列Done直到條件滿足時循環結束#! /bin/bash# 將指定目錄下(參數傳遞$1)的所有以.txt為后綴的文件更名為*.docdirectory=$1if [ ! $directory ] then echo "please input the argument directory" exitfifiles=`ls ${directory}`for file in $files; do if [ -f ${file} ] echo $file then suffix=${file#*\.} echo $suffix if [[ $suffix == "txt" ]] then prefix=${file%\.*} mv $directory/$file $directory/$prefix.doc fi fidone函數functionname() { 命令列表 return }函數的調用方式為:functionname arguments

更多Linux文章,請訪問Linux教程欄目進行學習!

以上就是Linux基礎之shell編程基礎的詳細內容,更多請關注php中文網其它相關文章!

來源:php中文網

免責聲明:本文由用戶上傳,如有侵權請聯系刪除!