Linux shell编程学习总结
主要內容:
- shell編程
- sed命令
- awk命令
- crontab定時器
什么是Shell?
Shell是用戶與內核進行交互操作的一種接口,目前最流行的Shell稱為bash Shell
Shell也是一門編程語言<解釋型的編程語言>,即shell腳本
一個系統可以存在多個shell,可以通過cat /etc/shells命令查看系統中安裝的shell,不同的shell可能支持的命令語法是不相同的
Shell腳本的執行方式?
第一種:輸入腳本的絕對路徑或相對路徑
首先要賦予+x權限
第二種:bash或sh +腳本
sh /root/helloWorld.shsh helloWorld.sh第三種:在腳本的路徑前再加”. “
. /root/helloWorld.sh. ./helloWorld.sh區別:第一種和第二種會新開一個bash,不同bash中的變量無法共享.
Shell中的變量?
Linux Shell中的變量分為“系統變量”和“用戶自定義變量”,可以通過set命令查看那系統變量
系統變量:$HOME、$PWD、$SHELL、$USER等等
顯示當前shell中所有變量 : set
定義變量?
變量=值 (例如STR=abc)
等號兩側不能有空格
變量名稱一般習慣為大寫
雙引號和單引號有區別,雙引號僅將空格脫意,單引號會將所有特殊字符脫意
unset A撤銷變量 A
readonly B=2 聲明靜態的變量 B=2 ,不能 unset
export 變量名 可把變量提升為全局環境變量,可供其他shell程序使用
將命令的返回值賦給變量?
A=ls -la ( ls與la用`符號包括在內(波浪線按鍵中的,編輯器問題會被轉義))反引號,運行里面的命令,并把結果返回給變量A
A=$(ls -la) 等價于反引號
Shell中的特殊變量?
$? 表示上一個命令退出的狀態
$$ 表示當前進程編號
$0 表示當前腳本名稱
$n 表示n位置的輸入參數(n代表數字,n>=1)
$# 表示參數的個數,常用于循環
$*和$@ 都表示參數列表
$*與@區別?@區別?* 和 @都表示傳遞給函數或腳本的所有參數,不被雙引號”“包含時,都以@都表示傳遞給函數或腳本的所有參數,不被雙引號”“包含時,都以1 2…2…n 的形式輸出所有參數
當它們被雙引號” “包含時,”?"會將所有的參數作為一個整體,以"?"會將所有的參數作為一個整體,以"1 2…2…n”的形式輸出所有參數;”@"會將各個參數分開,以"@"會將各個參數分開,以"1” “2"…"2"…"n” 的形式輸出所有參數
運算符?
格式 :expr m + n 或$((m+n)) 注意expr運算符間要有空格
例如計算(2 +3 )×4 的值
1 .分步計算
2.一步完成計算
expr `expr 2 + 3 ` \* 4echo `expr \`expr 2 + 3\` \* 4` 或 $(((2+3)*4))案例:
[root@weijie aa]# echo $(((2+3)*4))
20
for循環?
第一種:
第二種:
for ((i = 0; i <= 5; i++)) doecho "welcome $i times" done 或 for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; donewhile循環?
第一種
第二種
i=1 while ((i<=3)) doecho $ilet i++ done解釋:let 是讓i++執行的指令,let詳解請參考 博客
case語句?
格式
read命令?
read -p(提示語句)-n(字符個數) -t(等
使用示例:
if判斷?
\#!/bin/bash read -p "please input your name:" NAME if [ $NAME = root ]thenecho "hello ${NAME}, welcome !"elif [ $NAME = itcast ]thenecho "hello ${NAME}, welcome !"elseecho "SB, get out here !" fi判斷語句?
[ condition ] (注意condition前后要有空格)
#非空返回true,可使用$?驗證(0為true,>1為false)
[ itcast ]
#空返回false
[ ]
[ condition ] && echo OK || echo notok//注意注意注意:中括號與condition兩邊有一個空格。
條件滿足,執行前面的語句,否則反之。
案例:[root@weijie aa]# [ ] && echo ok || echo notOk
notOk
解析:shell編譯后的結果為notOk,因為[ ]中為空格返回的值為1(shell中1表示條件與假與C++、java等語言不同)
常用判斷條件?
= 字符串比較
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
案例:
-r 有讀的權限
-w 有寫的權限
-x 有執行的權限
-f 文件存在并且是一個常規的文件
-s 文件存在且不為空
-d 文件存在并是一個目錄
-b文件存在并且是一個塊設備
-L 文件存在并且是一個鏈接
案例:
[root@weijie aa]# [ -r shells.sh ]
[root@weijie aa]# echo $?
0
Shell自定義函數?
語法
注意
1.必須在調用函數地方之前,先聲明函數,shell腳本是逐行運行。不會像其它語言一樣先預編譯
2.函數返回值,只能通過$? 系統變量獲得,可以顯示加:return 返回,如果不加,將以最后一條命令運行結果,作為返回值。 return后跟數值n(0-255)
案例:
結果:
0(表示上一條指令執行成功,也就是花括號中的代碼塊執行成功)
5 4(給函數傳遞兩個參數,$1:表示獲取第一個參數)
9(返回計算結果)
腳本調試?
sh -vx helloWorld.sh或者在腳本中增加set -x
案例:
sed命令?
sed全稱是:Stream EDitor即流編輯器,是一個很好的文本處理工具,本身是一個管道命令,處理時,把當前處理的行存儲在臨時緩沖區中,接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行。它是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作。
sed選項?
-n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的數據一般都會被列出到終端上。但如果加上 -n 參數后,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。
-e :直接在命令列模式上進行 sed 的動作編輯;
-i :直接修改讀取的文件內容,而不是輸出到終端。
sed function?
a :新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)
d :刪除,因為是刪除啊,所以 d 后面通常不接任何內容
i :插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行)
p :列印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行
s :取代,可以直接進行取代的工作!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g
awk命令?
AWK是一種優良的文本處理工具。其名稱得自于它的創始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首個字母,AWK 提供了極其強大的功能:可以進行樣式裝入、流控制、數學運算符、進程控制語句甚至于內置的變量和函數。它具備了一個完整的語言所應具有的幾乎所有精美特性。實際上 AWK 的確擁有自己的語言:AWK 程序設計語言, 三位創建者已將它正式定義為“樣式掃描和處理語言”。它允許您創建簡短的程序,這些程序讀取輸入文件、為數據排序、處理數據、對輸入執行計算以及生成報表,還有無數其他的功能。
awk命令格式?
awk 'pattern1 {action1} pattern2 {action2} ...' filename總結
以上是生活随笔為你收集整理的Linux shell编程学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 磁盘管理之逻辑卷管理(Logical V
- 下一篇: Linux常用指令2