Bash Shell 基礎特性
Bash Shell 基礎特性之globbing
檔名通配:元字元
*:匹配任意長度任意字元
pa*,*pa*,*pa,p*a,*p*a
?:匹配任意單個字元
p?
pad:p?d,p*d
pd:p?d, p*d
paad: p?d, p*d
[]:匹配指定集合內的任意單個字元
[0-9]:任意數字
[a-z]:任意小寫字元
[A-Z]:任意大小字元
[0-9a-dA-Z] [[:alnum:]]
[^]:匹配指定集合外的任意單個字元
p[^k-z]*
字符集合:
[:space:] 所有的空白字元, [[:space:]]
[:punct:] 所有標點符號
[:lower:] 所有小寫字母
[:upper:] 大
[:digit:] 所有數字
[:alpha:] 所有字母
[:alnum:] 所有字母和數字
練習1:顯示/var目錄下所有l開頭,以一個小寫字母結尾,且中間出現一位數字的檔案或目錄;
# ls -d /var/l*[[:digit:]]*[[:lower:]]
練習2:顯示/etc/目錄下,以任意一位數字開頭,且以非數字結尾的檔案或目錄;
# ls -d /etc/[0-9]*[^0-9]
練習3: 顯示/etc/目錄下,以非字母開頭,後面跟了一個字母及其它任意長度任意字元的檔案或目錄;
# ls -d /etc/[^[:alpha:]][[:alpha:]]*
練習4:複製/etc/下,所有以m開頭,以非數字結尾的檔案或目錄至/tmp/mageedu目錄中;
# mkdir /tmp/mageedu
# cp -a /etc/m*[^0-9] /tmp/mageedu/
練習5:複製/etc目錄下,所有以.d結尾的檔案或目錄至/tmp/mageedu2目錄中;
# mkdir /tmp/mageedu2
# cp -a /etc/*.d /tmp/mageedu2/
練習6:複製/etc目錄下,所有以.conf結尾,以m,n,r,p開頭的檔案或目錄至/tmp/mageedu3目錄中;
# mkdir /tmp/mageedu3
# cp -a /etc/[mnrp]*.conf /tmp/mageedu3
bash特性之快捷鍵:
Ctrl + a: 跳轉至命令首部
Ctrl + e: 跳轉至命令尾部
Ctrl + l: 清屏
Ctrl + c: 中止或取消
Ctrl + u: 刪除命令列首至游標所在處的所有字元
Ctrl + k: 刪除游標所在處至命令尾部的所有字元
bash特性之輸入輸出重定向及管道
程式:有輸入或輸出的需求
標準輸入:keyboard,0
標準輸出:monitor, 1
錯誤輸出:monitor, 2
fd: file descriptor,檔案描述符
輸出重定向:>, >>
>: 目標檔案中原有內容會被清除;
>>: 新內容被追加至目標檔案尾部;
# set -C : 禁止使用覆蓋輸出重定向
此時依然可以使用>|進行強制覆蓋
# set +C
錯誤輸出重定向:2>, 2>>
2>
2>>
合併標準輸出和錯誤輸出的資料流至同一處:&>, &>>
&>
&>>
COMMAND > 檔名 2> &1
COMMAND >> 檔名 2>> &1
輸入重定向:<
tr命令:轉換或刪除字元
tr [OPTION]... SET1 [SET2]
-d: 刪除字元
Here Document:<<
# cat << EOF
# cat > 檔名 << EOF
管道:連線命令,實現將前一個命令的輸出當作後一個命令的輸入
COMMAND1 | COMMAND2 | COMMAND3 ...
練習1:將/etc/passwd檔案的內容的前十行轉換為大寫輸出;
# head /etc/passwd | tr 'a-z' 'A-Z'
練習2:將登入至當前系統上的所有使用者的前兩個的資訊轉換為大寫輸出;
# who | head -2 | tr 'a-z' 'A-Z'
文字檢視及處理工具:
wc [OPTION] FILE...
-c: 位元組數
-l:行數
-w: 單詞數
cut OPTION FILE ...
-d CHAR: 指定欄位分隔符
-f #|#-#|#,#:指定要顯示的欄位
sort [OPTION...] FILE...
-n: 按數值大小進行排序
-r: 逆序
-f: 忽略字元大小寫
-t CHAR: 指定欄位分隔符
-k #: 指定用於排序的欄位
-u: 重複的行只保留一次
uniq [OPTION...] FILE...
-c: 顯示每行出現的次數;
-d: 僅顯示重複的行;
-u: 僅顯示不曾重複的行;
練習:取出ifconfig eth0結果中的ip地址;
# ifconfig eth0 | head -2 | tail -1 | cut -d: -f2 | cut -d' ' -f1
bash指令碼的編寫
命令堆砌
1、指令碼絕對第一行從一個字元位置開始給出shebang:
#!/bin/bash
2、執行指令碼:
(1) 給指令碼執行許可權,而後指定指令碼路徑並執行之;
(2) # bash 指令碼路徑
練習1:寫一個指令碼
(1) 建立目錄/tmp/testdir;
(2) 複製檔案/etc/fstab, /etc/rc.d/rc.sysinit至此目錄中;
#!/bin/bash
directory=/tmp/testdir
mkdir $directory
cp /etc/fstab /etc/rc.d/rc.sysinit $directory
引用方式:
強引用:''
弱引用:""
命令引用:`COMMAND`, $(COMMAND)
bash中的算術運算:
+, -, *, /, %
實現算術運算:
(1) let var=算術表示式
(2) var=$[算術表示式]
(3) var=$((算術表示式))
a=6
a=$[$a+2]
bash中的增強型賦值:
+=, -=, *=, /=, %=
aa+=2 ---> aa=$[$aa+2]
aa-=3 ---> aa=$[$aa-3]
let var++ let aa++ ---> let aa=$aa+1
let var-- let aa-- ---> let aa=$aa-1
練習:寫一個指令碼
計算/etc/rc.d/rc.sysinit的行數與/etc/rc.d/init.d/fucntions檔案行數之和;
#!/bin/bash
syslines=`wc -l /etc/rc.d/rc.sysinit |cut -d " " -f 1`
funclines=$(wc -l /etc/rc.d/init.d/functions |cut -d " " -f 1)
lines=$[$syslines+$funclines]
echo $lines
bash程式設計的知識點:位置變數和特殊變數
位置引數變數:
scirpt1.sh arg1 arg2 ...
$0 $1 $2 ... ${10} ...
指令碼註釋:除第一行的shebang之外,任何以#開頭的行都表示為註釋資訊,會被直譯器忽略;
# information
特殊變數:
$#:位置引數變數的個數,
$@:位置引數列表
$*:位置引數列表
練習2:寫一個指令碼,能接受一個引數,此引數為系統上的某文字檔案路徑;
(1) 顯示此檔案的總行數;
#!/bin/bash
filedir=$1
lines=`wc -l $filedir |cut -d ' ' -f 1`
echo "$filedir lines is :$lines"
Linux任務計劃、週期性任務執行
週期性任務執行: cron
守護程式(crond):服務,不間斷地執行於後臺
# service crond {start|stop|status|restart}
cron的任務分兩類:
系統cron任務:定義在/etc/crontab檔案中
使用者cron任務:定義在/var/spool/cron/USERNAME檔案中;功能類似於/etc/crontab檔案
每行定義一個週期性任務計劃
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
例如:在7點8分執行echo "how are you?"
08 07 * * * root /bin/echo "how are you?"
結果透過郵件進行通知;
時間表示法:
時間:
分鐘:有效取值0-59
小時:有效取值0-23
天:1-31
月:1-12
周幾:0-7
(1) 給出其有效取值範圍內的某特定值;
5 * * * * /bin/echo "howdy"
16 8 * * * /bin/echo "howdy"
16 9 * * 3 /bin/echo "howdy"
12 11 20 * * /bin/echo "howdy"
03 07 01 07 * /bin/echo "howdy"
(2) *:給定時間位上的有效取值範圍內的所有可用值
(3) -: 給定時間位連續取值區間
6-12 * * * * /bin/echo "howdy"
(4) ,: 給定時間位上的離散取值
1,31 * * * * /bin/echo "howdy"
1,31 6,18 * * * /bin/echo "howdy"
(5) */#: 對應時間位每#個時間單位一次;
1 2 */3 * * /bin/echo "howdy"
如何定義使用者cron任務:
crontab命令:
-l: 顯示任務列表
-e:編輯任務
-r: 移除所有任務
注意:
(1) cron執行時是以cron有自己的執行環境;以cron身份執行命令或指令碼時,建議使用絕對路徑,或在指令碼中明確定義PATH環境變數;
(2) cron的任務結果以郵件通知,如果不想接收郵件,可使用輸出重定向:
> /dev/null
&> /dev/null
> /dev/null 2>&1
(3) 對於cron任務來說,%有特殊用處,如果在命令中需要用到%,得轉義,使用\%格式;如果%放置於單引號中,也可不用轉義
10 03 * * * tar Jcf /backup/etc-$(date +\%F-\%H-\%M-\%S).tar.xz /etc/*
練習
1、每4小時備份一次/etc/目錄至/backup目錄中,儲存的檔案為格式為形如etc-20141124010101.tar.xz;
1 */4 * * * /bin/tar Jcf /backup/etc-$(date +'%Y%m%d%H%M%S').tar.xz /etc/* &> /dev/null
2、每週2,4,7備份/var/log/messages檔案至/backup/messages/目錄中,檔名儲存為形如messages-20141124.tar.xz;
1 1 * * 2,4,7 /bin/tar Jcf /backup/messages/messages-$(date +'%Y%m%d').tar.xz /var/log/messages &> /dev/null
3、工作日的工作時間內,每小時執行一次ip addr show命令;
1 9-18 * * 1-5 /sbin/ip addr show
檔名通配:元字元
*:匹配任意長度任意字元
pa*,*pa*,*pa,p*a,*p*a
?:匹配任意單個字元
p?
pad:p?d,p*d
pd:p?d, p*d
paad: p?d, p*d
[]:匹配指定集合內的任意單個字元
[0-9]:任意數字
[a-z]:任意小寫字元
[A-Z]:任意大小字元
[0-9a-dA-Z] [[:alnum:]]
[^]:匹配指定集合外的任意單個字元
p[^k-z]*
字符集合:
[:space:] 所有的空白字元, [[:space:]]
[:punct:] 所有標點符號
[:lower:] 所有小寫字母
[:upper:] 大
[:digit:] 所有數字
[:alpha:] 所有字母
[:alnum:] 所有字母和數字
練習1:顯示/var目錄下所有l開頭,以一個小寫字母結尾,且中間出現一位數字的檔案或目錄;
# ls -d /var/l*[[:digit:]]*[[:lower:]]
練習2:顯示/etc/目錄下,以任意一位數字開頭,且以非數字結尾的檔案或目錄;
# ls -d /etc/[0-9]*[^0-9]
練習3: 顯示/etc/目錄下,以非字母開頭,後面跟了一個字母及其它任意長度任意字元的檔案或目錄;
# ls -d /etc/[^[:alpha:]][[:alpha:]]*
練習4:複製/etc/下,所有以m開頭,以非數字結尾的檔案或目錄至/tmp/mageedu目錄中;
# mkdir /tmp/mageedu
# cp -a /etc/m*[^0-9] /tmp/mageedu/
練習5:複製/etc目錄下,所有以.d結尾的檔案或目錄至/tmp/mageedu2目錄中;
# mkdir /tmp/mageedu2
# cp -a /etc/*.d /tmp/mageedu2/
練習6:複製/etc目錄下,所有以.conf結尾,以m,n,r,p開頭的檔案或目錄至/tmp/mageedu3目錄中;
# mkdir /tmp/mageedu3
# cp -a /etc/[mnrp]*.conf /tmp/mageedu3
bash特性之快捷鍵:
Ctrl + a: 跳轉至命令首部
Ctrl + e: 跳轉至命令尾部
Ctrl + l: 清屏
Ctrl + c: 中止或取消
Ctrl + u: 刪除命令列首至游標所在處的所有字元
Ctrl + k: 刪除游標所在處至命令尾部的所有字元
bash特性之輸入輸出重定向及管道
程式:有輸入或輸出的需求
標準輸入:keyboard,0
標準輸出:monitor, 1
錯誤輸出:monitor, 2
fd: file descriptor,檔案描述符
輸出重定向:>, >>
>: 目標檔案中原有內容會被清除;
>>: 新內容被追加至目標檔案尾部;
# set -C : 禁止使用覆蓋輸出重定向
此時依然可以使用>|進行強制覆蓋
# set +C
錯誤輸出重定向:2>, 2>>
2>
2>>
合併標準輸出和錯誤輸出的資料流至同一處:&>, &>>
&>
&>>
COMMAND > 檔名 2> &1
COMMAND >> 檔名 2>> &1
輸入重定向:<
tr命令:轉換或刪除字元
tr [OPTION]... SET1 [SET2]
-d: 刪除字元
Here Document:<<
# cat << EOF
# cat > 檔名 << EOF
管道:連線命令,實現將前一個命令的輸出當作後一個命令的輸入
COMMAND1 | COMMAND2 | COMMAND3 ...
練習1:將/etc/passwd檔案的內容的前十行轉換為大寫輸出;
# head /etc/passwd | tr 'a-z' 'A-Z'
練習2:將登入至當前系統上的所有使用者的前兩個的資訊轉換為大寫輸出;
# who | head -2 | tr 'a-z' 'A-Z'
文字檢視及處理工具:
wc [OPTION] FILE...
-c: 位元組數
-l:行數
-w: 單詞數
cut OPTION FILE ...
-d CHAR: 指定欄位分隔符
-f #|#-#|#,#:指定要顯示的欄位
sort [OPTION...] FILE...
-n: 按數值大小進行排序
-r: 逆序
-f: 忽略字元大小寫
-t CHAR: 指定欄位分隔符
-k #: 指定用於排序的欄位
-u: 重複的行只保留一次
uniq [OPTION...] FILE...
-c: 顯示每行出現的次數;
-d: 僅顯示重複的行;
-u: 僅顯示不曾重複的行;
練習:取出ifconfig eth0結果中的ip地址;
# ifconfig eth0 | head -2 | tail -1 | cut -d: -f2 | cut -d' ' -f1
bash指令碼的編寫
命令堆砌
1、指令碼絕對第一行從一個字元位置開始給出shebang:
#!/bin/bash
2、執行指令碼:
(1) 給指令碼執行許可權,而後指定指令碼路徑並執行之;
(2) # bash 指令碼路徑
練習1:寫一個指令碼
(1) 建立目錄/tmp/testdir;
(2) 複製檔案/etc/fstab, /etc/rc.d/rc.sysinit至此目錄中;
#!/bin/bash
directory=/tmp/testdir
mkdir $directory
cp /etc/fstab /etc/rc.d/rc.sysinit $directory
引用方式:
強引用:''
弱引用:""
命令引用:`COMMAND`, $(COMMAND)
bash中的算術運算:
+, -, *, /, %
實現算術運算:
(1) let var=算術表示式
(2) var=$[算術表示式]
(3) var=$((算術表示式))
a=6
a=$[$a+2]
bash中的增強型賦值:
+=, -=, *=, /=, %=
aa+=2 ---> aa=$[$aa+2]
aa-=3 ---> aa=$[$aa-3]
let var++ let aa++ ---> let aa=$aa+1
let var-- let aa-- ---> let aa=$aa-1
練習:寫一個指令碼
計算/etc/rc.d/rc.sysinit的行數與/etc/rc.d/init.d/fucntions檔案行數之和;
#!/bin/bash
syslines=`wc -l /etc/rc.d/rc.sysinit |cut -d " " -f 1`
funclines=$(wc -l /etc/rc.d/init.d/functions |cut -d " " -f 1)
lines=$[$syslines+$funclines]
echo $lines
bash程式設計的知識點:位置變數和特殊變數
位置引數變數:
scirpt1.sh arg1 arg2 ...
$0 $1 $2 ... ${10} ...
指令碼註釋:除第一行的shebang之外,任何以#開頭的行都表示為註釋資訊,會被直譯器忽略;
# information
特殊變數:
$#:位置引數變數的個數,
$@:位置引數列表
$*:位置引數列表
練習2:寫一個指令碼,能接受一個引數,此引數為系統上的某文字檔案路徑;
(1) 顯示此檔案的總行數;
#!/bin/bash
filedir=$1
lines=`wc -l $filedir |cut -d ' ' -f 1`
echo "$filedir lines is :$lines"
Linux任務計劃、週期性任務執行
週期性任務執行: cron
守護程式(crond):服務,不間斷地執行於後臺
# service crond {start|stop|status|restart}
cron的任務分兩類:
系統cron任務:定義在/etc/crontab檔案中
使用者cron任務:定義在/var/spool/cron/USERNAME檔案中;功能類似於/etc/crontab檔案
每行定義一個週期性任務計劃
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
例如:在7點8分執行echo "how are you?"
08 07 * * * root /bin/echo "how are you?"
結果透過郵件進行通知;
時間表示法:
時間:
分鐘:有效取值0-59
小時:有效取值0-23
天:1-31
月:1-12
周幾:0-7
(1) 給出其有效取值範圍內的某特定值;
5 * * * * /bin/echo "howdy"
16 8 * * * /bin/echo "howdy"
16 9 * * 3 /bin/echo "howdy"
12 11 20 * * /bin/echo "howdy"
03 07 01 07 * /bin/echo "howdy"
(2) *:給定時間位上的有效取值範圍內的所有可用值
(3) -: 給定時間位連續取值區間
6-12 * * * * /bin/echo "howdy"
(4) ,: 給定時間位上的離散取值
1,31 * * * * /bin/echo "howdy"
1,31 6,18 * * * /bin/echo "howdy"
(5) */#: 對應時間位每#個時間單位一次;
1 2 */3 * * /bin/echo "howdy"
如何定義使用者cron任務:
crontab命令:
-l: 顯示任務列表
-e:編輯任務
-r: 移除所有任務
注意:
(1) cron執行時是以cron有自己的執行環境;以cron身份執行命令或指令碼時,建議使用絕對路徑,或在指令碼中明確定義PATH環境變數;
(2) cron的任務結果以郵件通知,如果不想接收郵件,可使用輸出重定向:
> /dev/null
&> /dev/null
> /dev/null 2>&1
(3) 對於cron任務來說,%有特殊用處,如果在命令中需要用到%,得轉義,使用\%格式;如果%放置於單引號中,也可不用轉義
10 03 * * * tar Jcf /backup/etc-$(date +\%F-\%H-\%M-\%S).tar.xz /etc/*
練習
1、每4小時備份一次/etc/目錄至/backup目錄中,儲存的檔案為格式為形如etc-20141124010101.tar.xz;
1 */4 * * * /bin/tar Jcf /backup/etc-$(date +'%Y%m%d%H%M%S').tar.xz /etc/* &> /dev/null
2、每週2,4,7備份/var/log/messages檔案至/backup/messages/目錄中,檔名儲存為形如messages-20141124.tar.xz;
1 1 * * 2,4,7 /bin/tar Jcf /backup/messages/messages-$(date +'%Y%m%d').tar.xz /var/log/messages &> /dev/null
3、工作日的工作時間內,每小時執行一次ip addr show命令;
1 9-18 * * 1-5 /sbin/ip addr show
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28282660/viewspace-1754253/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- bash基礎特性、正規表示式
- bash基礎
- 『忘了再學』Shell基礎 — 9、Bash中的特殊符號(一)符號
- 『忘了再學』Shell基礎 — 10、Bash中的特殊符號(二)符號
- 『忘了再學』Shell基礎 — 4、Bash基本功能(history命令)
- Linux_day06_01_Shell指令碼程式設計_Bash基礎Linux指令碼程式設計
- shell基礎
- shell基礎教程二十四: shell基礎教程: Shell檔案包含
- Git Bash的基礎使用Git
- bash的特性
- bash及其特性
- 03 shell基礎
- shell 基礎命令
- Shell基礎教程七:Shell字串字串
- shell Bash變數變數
- [20180930]bash shell &.txt
- 『忘了再學』Shell基礎 — 7、Bash基本功能(多命令順序執行)
- 『忘了再學』Shell基礎 — 6、Bash基本功能(輸入輸出重定向)
- shell入門基礎
- shell基礎應用
- 9.Shell基礎
- Linux shell基礎3Linux
- Linux shell基礎1Linux
- Linux shell基礎2Linux
- shell基礎教程 十六: Shell until迴圈
- shell程式設計基礎程式設計
- Shell程式設計-基礎程式設計
- Shell(Bash)學習· 總章
- [20210908]Reverse Shell with Bash.txt
- linux 基礎(6)簡單認識 bashLinux
- Linux基礎五(shell指令碼)Linux指令碼
- shell程式設計基礎二程式設計
- Linux學習-shell基礎02Linux
- Redis 基礎特性講解Redis
- bash shell多執行緒方案執行緒
- [20210913]bash shell $* and $@ 的區別.txt
- Linux深入探索04-Bash shellLinux
- [20201116]bash shell IO重定向.txt
- bash shell 程式與磁碟資料