Shell程式設計零基礎教學
阿新 • • 發佈:2019-01-24
Shell 是一個用 C 語言編寫的程式,它是使用者使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程式設計語言。Shell 是指一種應用程式,這個應用程式提供了一個介面,使用者通過這個介面訪問作業系統核心的服務。Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一個典型的圖形介面 Shell。
正則表示式
在學習shell程式設計要有一定的正則表示式的基礎知識。
符號 含義 舉例 ^ 開始標記 "^abc"滿足的例子abc ^ 非(在[]內) "[^abc]"滿足例子:ddd、mpd $ 結束標記 "abc$"滿足例子:abc,mmabc \ 匹配轉義後的字串 . 任意字元 "a.c"滿足例子:abc,abcd \< 匹配單詞開始 "\<abc"滿足的例子abc、abcd \> 匹配單詞結束 "abc\>"滿足的例子abc,pmrabc | 或 "AAA|BBB"滿足例子:AAA,BBBpp ? 匹配前一個字元0或1次 "abc?"滿足的例子ab、mabcd 好* 匹配錢一個字元>=0次 “abc*”滿足的例子:abbb 好+ 匹配前一個字元>=1次 {} {m}{m,n}{m,}{,n}分別匹配錢一個字元m次、m到n次、>=m次、<=n次 [] []範圍內選其一,比較特殊的[0-9]代表數字,[a-z]代表小寫字母 () 將候選的所有元素放在()內,用|分隔開 "a(1|2|3)b"滿足的例子a1b
shell程式設計
- shell 變數
環境變數:用於爆粗能作業系統執行時使用的環境變數,用set命令檢視
可分為使用者環境變數(.bash_profile)和系統環境變數(/etc/profile)
位置變數 :將傳遞給指令碼的引數儲存在位置變數中,以便於在指令碼中引用這些引數
其中Bash定義了9個位置變數,分別是$1 ….指令碼編寫者在指令碼中引用這9個變數,獲取傳遞給指令碼的引數
注意:
$1 位置引數
$0 指令碼名稱
shell算術運算
“+”“-” “*”“/”“%”
使用方法
- $((experssion))
- $[expression]
expr expression
舉例
- $((5+4))
- expr 5/4
注意:expr要有空格 # expr 5 + 2
shell內建測試判斷
舉例1
[] 方式最常見 注意:測試表達式與中括號之間一定要有空格
舉例2
例子3
注意 字串一定要打引號
Data
- Date –s “2017-06-19 07:30:13” 修改系統時間(臨時)
- Date ‘+%Y%m%d’ 20170609 輸出時間 按年月日
- Date –d ‘7 day ago’ ‘+%Y%m%d’ 輸出7天前的日期
指令碼案例
#!bin/bash 宣告環境
#test 以#開頭的部分全部表示註釋
#shell指令碼從上往下依次執行
date
grep 'root' /etc/passwd
執行Shell指令碼
新增許可權命令: chmod 744 1.sh
./1.sh (./ 表示當前目錄)
. /temp/1.sh 表示執行這個檔案
控制語句
for
舉例1:
例子2
#!/bin/bash
for i in {1..10}
do
mkdir /home/zxq/shell/test/dir$i
done
#!/bin/bash
for i in ‘seq 50’ #反應好代表命令預先執行
do
mkdir /home/zxq/shell/test/dir$i
done
#!/bin/bash
For((i=1;i<=10;i++))
Do
Sum=$((SUM+1))
Done
Echo $SUM
while
#!/bin/bash
i=1
while [ $i –le 10 ] #注意空格
do
SUM=$((SUM+i))
i=$[i+1]
done
echo $SUM
讀取檔案
#!/bin/bash
while read –r line #read 逐行讀取
do
echo $line
done < /etc/passwd # < 後面接檔案
if
#!/bin/bash
if [ 3 –eq 3 ] #注意 if後面要有空格 [] 也要有空格
then
echo yes
fi
case
#!/bin/bash
case $1 in
top)
top
;;
free)
free
;;
df)
df
;;
*)
echo "usage:$0{top|free|df}"
esac
Shell 函式
#!/bin/bash
sum(){
echo $(($1+$2))
}
sum 5 6
計劃任務
一次性的計劃任務
週期性的計劃任務
crontab
1)確保服務啟動
service crond status
chkconfig --list
2)制定計劃任務內容
Crontab –e
和vi介面一樣進行輸入 * * * * * cmd 前面五列表示時間用空格分開
例如:
0 2 * * 3 cp /etc/passwd /tmp
每週三凌晨2點備份檔案/etc/passwd 到tem資料夾中
5 1 10,25 * * rm –rf /tmp/*
每個月10號和25號凌晨1點5分執行(沒半個月清空一次tmp)
*/10 * * * * ntpdata 時間伺服器IP
每10分鐘執行時間同步
0 1-6 * * *
每天1點到6點執行
3)重啟crond服務
service crond restart