文件歸檔
tar
(1) 創建歸檔
tar -c -f / PATH/TO/SOMEFILE .tar FILE…
tar cf / PATH/TO/SOMEFILE .tar FILE…
(2) 查看歸檔文件中的文件列表
tar -t -f /PATH/TO/SOMEFILE .tar
(3) 展開歸檔
tar -x -f /PATH/TO/SOMEFILE .tar
tar -x -f /PATH/TO/SOMEFILE .tar -C /PATH/
結合壓縮工具實現:歸檔并壓縮
-j: bzip2, -z: gzip, -J: xz
實現了歸檔壓縮,但是結合使用時,注意文件名后綴,不同的壓縮使用的后綴有差異,
cpio
復制 從或到文件
? cpio 命令是通過重定向的方式將文件進行打包備份,還原恢復
的工具,它可以解壓以“.cpio” 或者“.tar” 結尾的文件。
? cpio [ 選項] > 文件名或者設備名
? cpio [ 選項] < 文件名或者設備名
? 選項
-o 將文件拷貝打包成文件或者將文件輸出到設備上
-i 解包,將打包文件解壓或將設備上的備份還原到系統
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-v 顯示打包過程中的文件名稱。
-d 解包生成目錄,在cpio 還原時,自動的建立目錄
-c 一種較新的存儲方式
使用實例
將etc 目錄備份:
find ./etc -print |cpio -ov >etc.cpio
內容預覽
cpio –tv < etc.cpio
解包文件
cpio –iv <etc.cpio
cpio –idv < etc.cpio
shell腳本編程—–循環
for循環
for 變量名 in 列表 ;do
循環體
done
執行機制:
依次將列表中的元素賦值給”變量名“;每次賦值后即執行一次
循環體;知道列表中的元素耗盡,循環結束
列表生成方式
1.直接給出列表
2.整數列表:
a.{start..end}
b.${seq [start [step] end]}
3.返回列表的命令
$(command)
4.使用glob,如:*.sh
5.變量引用
$@, $*
for練習:
? 1 、判斷/var/ 目錄下所有文件的類型
腳本:
1 #!/bin/bash 2 #qiuwei 3 #2016-8-17 4 #filetype 5 for a in /var/*;do 6 if [[ -h $a ]];then 7 echo "the file $a is a sysmbol file" 8 elif [[ -b $a ]];then 9 echo "the file $a is a block file" 10 elif [[ -d $a ]];then 11 echo "the file $a is a directory" 12 elif [[ -f $a ]];then 13 echo "the file $a is a common file" 14 else 15 echo "the file $a is a other file" 16 fi 17 done ~
2、 、 添加10個 個 用戶user1-user10 ,密碼 同 用戶名
1 #!/bin/bash 2 #qiuwei 3 #2016-8-17 4 #useradd 5 6 for a in user{1..10};do 7 if id $a&>/dev/null;then ====>判斷uesr是否存在 8 echo "the user $a exist" &&echo $a |passwd --stdin $a ====>存在則顯示用戶存在,并修改密碼 9 else 10 useradd $a &&echo $a |passwd --stdin $a&&echo "the user $a create sucess" ==>不成功就創建用戶,并修改密碼,顯示創建成功 11 fi 12 done ~
3 、/etc/rc.d/rc3.d 目錄下分別有多個以K 開頭和以S 開頭的
文件 ;分別 讀取每個文件,以K 開頭的文件輸出為文件加stop
,以S 開頭的文件輸出為文件名加start; ;
“ “K34filename stop”
“S66filename start”
腳本:
1 #!/bin/bash 2 #qiuwei 3 #2016-8-17 4 #--------- 5 6 for a in `ls /etc/rc.d/rc3.d`;do 7 if echo "$a"|grep -q "\<K.*";then 8 echo -e "$a\tstop" 9 elif echo $a |grep -q "\<S*";then 10 echo -e "$a\tstart" 11 fi 12 done
4 、寫 一個腳本 ,提示輸入正整數n 的值,計算1+2+3+…n的 的
總和
1 #!/bin/bash 2 read -p "please input a number:" c 3 if echo $c|grep -q "^[0-9]\+$"&&[[ $c -ne 0 ]];then 4 echo right number 5 else 6 echo "wrong number"&&exit 7 fi 8 b=0 9 for a in `seq 1 $c`;do 10 b=$[$a+$b] 11 done 12 echo $b ============================================================ 1 #!/bin/bash 2 read -p "please input a number:" c 3 if echo $c|grep -q "^[0-9]\+$"&&[[ $c -ne 0 ]];then 4 5 b=0 6 for a in `seq 1 $c`;do 7 b=$[$a+$b] 8 done 9 else 10 echo "wrong number"&&exit 11 fi 12 echo $b
? 5、 、 寫一個腳本 ,提示請輸入網絡地址,如192.168.0.0 ,判
斷輸入的網段中主機在線狀態
腳本:
1 #!/bin/bash 2 #qiuwei 3 #ip test 4 5 read -p "please input a ip :" a 6 if echo $a|egrep "^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[ 0-4][0-9]|25[0-5])$";then 7 c=`echo $a|cut -d. -f4` 8 b=`echo $a|cut -d. -f1-3` 9 for i in `seq 1 $c`;do 10 if ping -c1 -w1 $b.$i &>/dev/null;then 11 echo -e "\033[32mthe host $b.$i is onlin\033[0m" 12 else 13 echo -e "\033[31mthe host $b.$i is offline\033[0m" 14 fi 15 done 16 else 17 echo "please input correct ip" 18 fi
? 6、 、 打印九九乘法表
腳本
1 #!/bin/bash 2 #qiuwei 3 #9*9 4 5 for i in `seq 1 9`;do 6 for j in `seq 1 9`;do 7 if [[ $i -ge $j ]];then 8 sum=$[$i*$j] 9 echo -ne "$j*$i=$sum \t" 10 11 fi 12 done 13 echo 14 done
while循環
while condition;do
循環體
done
condition:循環控制條件;進入循環之前,先做一次判斷,每一次循環之后會再次做判斷;
條件為true,則執行一次循環
條件為false,則終止循環
因此:condition一般應該有循環制變量;且此變量的值會在循環體不斷的被修正
進入條件:condition為true
退出條件:condition為false
whlie循環練習
? 1 、求100 以內所有正整數之和
1 #!/bin/bash 2 #qiuwei 3 #sum100 4 i=1 j=0 5 while [[ $i -le 100 ]] ;do 6 j=$[$i+$j] 7 let i++ 8 done 9 echo "the sum is $j"
? 2 、通過ping 命令探測172.16.250.1-254 范圍內的所有主機
的在線狀態,統計在線主機和離線主機各多少。
腳本:
1 #!/bin/bash
2 #qiuwei
3 #host online or not
4 ip=10.1.252.
5 i=1
6 a=0
7 b=0
8 while [[ $i -le 254 ]];do
9 if ping -c1 -w1 $ip$i &>/dev/null;then
10 echo -e "\033[32mthe host $ip$i online\033[0m"
11 let a++
12 else
13 echo -e "\033[31mthe host $ip$i offline\033[0m"
14 let b++
15 fi
16 let i++
17 done
18 echo "the online host number is: $a"
19 echo "the offline host number is: $b"
3 、打印九九乘法表
腳本
1 #!/bin/bash 2 #qiuwei 3 #9*9 4 i=1 5 while [[ $i -le 9 ]];do 6 j=1 7 while [[ $j -le $i ]];do 8 sum=$[$j*$i] 9 echo -en "$j*$i=$sum \t" 10 let j++ 11 done 12 echo 13 let i++ 14 done
? 4 、利用變量RANDOM 生成10 個隨機數字,輸出這個10 數字
,并顯示其中的最大者和最小者
1 #!/bin/bash 2 #qiuwei 3 #random 4 i=1 5 a=$RANDOM 6 max=$a 7 min=$a 8 while [[ $i -le 10 ]];do 9 if [[ $max -lt $a ]];then 10 max=$a 11 elif [[ $min -gt $a ]];then 12 min=$a 13 fi 14 echo $a 15 a=$RANDOM 16 let i++ 17 done 18 echo "the max number is $max" 19 echo "the min number is $min"
5 、打印國際象棋棋盤
1 #!/bin/bash 2 #qiuwei 3 #chess 4 i=1 5 while [[ $i -le 8 ]];do 6 j=1 7 while [[ $j -le 8 ]];do 8 a=$[$i+$j] 9 b=$[$a%2] 10 if [[ $b -eq 0 ]];then 11 echo -ne "\033[41;1m \033[0m" 12 else 13 echo -ne "\033[42;1m \033[0m" 14 fi 15 let j++ 16 done 17 echo 18 let i++ 19 done
until循環 ===>和while相反
until condition;do
循環體
done
進入條件:condition 為false
退出條件:condition 為true
continue N:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
continue ==>結束本輪循環,開始進行下輪判斷,false為進入,true為退出
fi
CMDn
…
done
break N:提前結束第N層循環,最內層為第1層
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
break ==>直接結束整層循環,
fi
CMDn
…
done
無限循環
while true;do
循環體
done
until false;do
循環體
done
until練習
1 、每隔3 秒鐘到系統上獲取已經登錄的用戶的信息;如果發
現用戶hacker 登錄,則將登錄時間和主機記錄于日志
/var/log/login.log 中, 并提示該用戶退出系統。
1 #!/bin/bash 2 #qiuwei 3 #host 4 5 until `who|grep -q "^hacker\>"`;do 6 sleep 3 7 echo "finding...." 8 done 9 10 11 who|grep "^hacker\>"|tr -s " "|cut -d" " -f1,3,4 >>/var/log/login.log 12 echo "please logout system"|mail hacker 13 echo "reminded and login record in /var/log/login.log"
? 2 、隨機生成10 以內的數字,實現猜字游戲,提示比較大或小
,相等則退出
1 #!/bin/bash 2 #qiuwei 3 #guess 4 5 a=$[$RANDOM%10+1] 6 7 read -p "input a number:" b 8 until [[ $a -eq $b ]];do 9 10 if [[ $a -gt $b ]];then 11 echo "intput a big number" 12 else 13 echo "input a small number" 14 fi 15 read -p "input a number:" b 16 done 17 echo "the number is right"
3.用循環完成如下
*
***
*****
1 #!/bin/bash 2 #qiuwei 3 #sangjiaoxing 4 #規律為:第n行的空行個數為總行數-n,星星個數為2n-1, 5 #所以我們在每一行打印對應的空格和星星數, 6 read -p "please input a number:" a 7 8 [[ $a =~ ^[0-9]+$ ]]&&[[ $a -ge 2 ]] 9 [[ $? -ne 0 ]]&&echo "wrong number"&&exit 10 #判斷輸入的數字,如果不是數字且大于等于2,就提示錯誤退出 11 for line in `seq 1 $a`;do 12 for (( sapce=a-line;sapce>0;sapce-- ));do 13 echo -n " " 14 #打印空行 15 done 16 for (( xing=1;xing<=(line*2-1);xing++ ));do 17 echo -n "*" 18 #打印星星 19 done 20 echo 21 done
2、用until循環實現國際象棋棋盤
1 #/bin/bash 2 #qiuwei 3 #用until循環實現國際象棋 4 i=1 5 until [[ $i -gt 8 ]];do 6 7 j=1 8 until [[ $j -gt 8 ]];do 9 a=$[$[$i+$j]%2] 10 if [[ $a -ne 1 ]];then 11 echo -ne "\033[43;1m \033[0m" 12 else 13 echo -ne "\033[42;1m \033[0m" 14 15 fi 16 let j++ 17 done 18 echo 19 let i++ 20 done
特殊用法
while 循環的特殊用法(遍歷文件的每一行)
while read line ;do
循環體
do < /path/from/somefile
依次讀取/path/from/somefile文件中的每一行,且將行賦值給變量line
練習
掃描/etc/passwd 文件每一行,如發現GECOS 字段為空,則填
充用戶名和單位電話為62985600 ,并提示該用戶的GECOS信 信
息修改成功
[root@localhost bin]# vim while6.sh 1 #!/bin/bash 2 #qiuwei 3 #gecos 4 while read line ;do 5 a=`echo $line|cut -d: -f5` 6 if [[ -z $a ]];then 7 b=`echo $line|cut -d: -f1` 8 chfn -f $b $b &>/dev/null 9 chfn -p 62985600 $b &>/dev/null 10 echo "sucess" 11 fi 12 done </etc/passwd
雙小括號方法,即((…)),也可用于算術運算
雙小括號也可以使bash sehll 實現C語言風格的變量操作
for循環的特殊格式:
for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式))
do
循環體
done
1 #/bin/bash 2 #qiuwei 3 for((a=1; a<10;a++));do 6 #初始變量a,a小于10,則判斷成功,循環執行,a++為修正變量 7 echo $a 8 done ~
控制變量初始化:僅在運行到循環代碼段時執行一次
控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算
,而后再做條件判斷
select
select variable in list
do
循環體
done
select循環主要用于創建菜單,按數字順序排列的示 菜單項將顯示在標準錯誤上,
并顯示 PS3 提示符,等待用戶輸入
select是個無限循環,所有如果不用break命令退出循環或exit退出腳本,循環無限執行
select經常和case一起使用
1 #/bin/bash 2 #qiuwei 3 4 PS3="what do you want to eat:" 5 6 select menu in ban you flash monkey ;do 7 case $menu in 8 ban) 9 echo "this is ban" 10 ;; 11 you) 12 echo "this is you" 13 ;; 14 flash) 15 echo "I am the flash" 16 ;; 17 monkey) 18 echo "this is a monkey" 19 ;; 20 *) 21 echo "you are a hehe" 22 break 23 ;; 24 esac 25 done
函數
函數function是由若干條shell命令組成的語句塊,實現代碼重用和模塊化編程
函數和shell程序相似,但是不能獨立運行,必須要調用才能運行,函數是在當前
shell中運行的,shell程序測試在子shell中運行的,因此在當前shell中,函數可以對
shell中變量進行修改
函數語法
-
function f-name{
…函數體…
}
-
f-name(){
…函數體…
}
函數使用
函數的定義和使用:
可在交互式環境下定義函數
可將函數放在腳本文件中作為它的一部分
可放在只包含函數的單獨文件中
調用:函數只有被調用才會執行,給點函數名即可
函數名出現的地方,會被自帶替換為函數代碼
函數的生命周期:被調用時創建,返回時終止
函數和一般命令一樣,執行后有兩種返回值
結果返回值
1.使用echo 或printf命令進行輸出
2.函數體中調用命令的輸出結果
退出狀態碼
1.取決于函數中執行的最后一條命令的退出狀態碼
2.自定義
return 默認為最后一條命令的狀態返回值
return 0 無錯誤返回
return 1-255 錯誤返回
注意:函數名不要和系統命令同名
簡單函數實例
1 #/bin/bash 2 #qiuwei 3 #test 4 5 fun(){ 6 echo "hello everyone ,I am the flash" 7 } 8 echo "I am the Iron Man" 9 fun 10 echo "You are stupid " 11
函數文件
可以將經常使用的函數存入函數文件,然后將函數文件載入shell,
一旦函數文件載入shell,就可以在命令行或腳本中調用函數
可以使用set命令查看所有定義的函數,可以看到所有已經載入shell的函數
若要改動函數,首先用unset命令從shell中刪除函數,改動完畢后,在從新載入此文件
實例
1.創建函數文件
1 #/bin/bash 2 #funfile 3 #qiuwei 4 5 funfile(){ 6 7 if [[ $# -lt 1 ]];then 8 echo "please at least input a agr" 9 return 1 10 else 11 echo $1 12 fi 13 14 }
2.載入shell
. funfile
source funfile 路徑要正確
然后用set檢查是否載入
3.執行函數
刪除shell函數
現在對函數做一些改動。首先刪除函數,使其對shell 不可用,使用unset 命令完成此功能
unset funfile
在使用set,函數不在顯示
函數參數
函數可以接受參數:
傳遞參數給函數:調用函數時,在函數名后面以空白分隔給定參數列表即可
在函數體中,可使用$1,$2…調用這些參數,還可以使用$@,#*.$#等等
函數變量
環境變量:當前shell和子shell有效
本地變量:只對當前shell進程有效。為執行腳本會啟動專用子shell進程;因此
本地變量的作用范圍是當前shell腳本程序文件,包括腳本中的函數
局部變量:函數的生命周期;函數結束時變量被自動失效
定義局部變量 local name=value
實例
1 #/bin/bash 2 a=qiuwei 3 fun(){ 4 a=pingxiong 5 echo $a 6 } 7 8 fun 9 echo $a ~
結果為
1 #/bin/bash 2 a=qiuwei 3 fun(){ 4 local a=pingxiong 5 echo $a 6 } 7 8 fun 9 echo $a
理解:函數和當前shell是在同一等級,如果直接變量賦值,就會覆蓋前面的變量賦值,
,如果想兩個變量同時生效,互不干擾,就必須使用局部變量了 ,如上,局部變量
只用于函數中
函數遞歸
函數直接或間接調用自身,注意遞歸層數
遞歸實例:
階乘是基斯頓·于 卡曼于 1808 年發明的運算符號,是數學術語
一個正整數的階乘(factorial )是所有小于及等于該數的正整
數的積,并且有0 的階乘為1 。自然數n 的階乘寫作n!。 。
n!=1 ×2 ×3 ×… ×n。 。
階乘亦可以遞歸方式定義:0!=1 ,n!=(n-1)! ×n。 。
n!=n(n-1)(n-2)…1
n(n-1)! = n(n-1)(n-2)!
1 #/bin/bash 2 #qiuwei 3 #遞歸函數 4 fun(){ 5 6 if [ $1 -eq 0 -o $1 -eq 1 ];then 7 echo 1 8 #0和1的階乘為1 9 else 10 11 echo "$[$1*$(fun $[$1-1])]" 12 #$1的階乘為$1*($1-1)階乘 13 #注意以上格式 14 fi 15 } 16 17 fun 7
練習
? 1 、寫 一 個服務腳本/root/bin/testsrv.sh ,完成如下要求
(1) 腳本可接受參數:start, stop, restart, status
(2) 如果參數非此四者之一,提示使用格式后報錯 退出
(3) 如是start:則 則 創建/var/lock/subsys/ SCRIPT_NAME , 并顯示“啟動成功”
考慮:如果事先已經啟動過一次,該如何處理?
(4) 如是stop:則 則 刪除/var/lock/subsys/ SCRIPT_NAME , 并顯示“停止完成”
考慮:如果事先已然停止過了,該如何處理?
(5) 如是restart ,則先stop, 再start
考慮:如果本來沒有start ,如何處理?
(6) 如是status, 則如果/var/lock/subsys/ SCRIPT_NAME 文件存在,則顯示
“ SCRIPT_NAME is running…”
如果/var/lock/subsys/ SCRIPT_NAME 文件不存在,則顯示“ SCRIPT_NAME
is stopped…”
其中: SCRIPT_NAME 為當前腳 本名
腳本:
1 #bin/bash 2 #qiuwei 3 #1 、寫 一 個服務腳本/root/bin/testsrv.sh ,完成如下要求 4 #(1) 腳本可接受參數:start, stop, restart, status 5 #(2) 如果參數非此四者之一,提示使用格式后報錯 退出 6 #(3) 如是start:則創建/var/lock/subsys/ SCRIPT_NAME , 并顯示“啟動成功” 7 #考慮:如果事先已經啟動過一次,該如何處理? 8 #(4) 如是stop:則刪除/var/lock/subsys/ SCRIPT_NAME , 并顯示“停止完成” 9 #考慮:如果事先已然停止過了,該如何處理? 10 #(5) 如是restart ,則先stop, 再start 11 #考慮:如果本來沒有start ,如何處理? 12 #(6) 如是status, 則如果/var/lock/subsys/ SCRIPT_NAME 文件存在,則顯示 13 #“ SCRIPT_NAME is running...” 14 #如果/var/lock/subsys/ SCRIPT_NAME 文件不存在,則顯示“ SCRIPT_NAME 15 #is stopped...” 16 #其中: SCRIPT_NAME 為當前腳本名 17 file=/var/lock/subsys/testscv 18 start(){ 19 20 if [[ -f $file ]];then 21 echo "$file is exsit" 22 else 23 touch $file && echo "start finshed" 24 25 fi 26 } 27 28 stop(){ 29 30 if [[ -f $file ]];then 31 rm -f $file && echo "stop finshed" 32 else 33 echo "No such file " 34 fi 35 } 36 37 restart(){ 38 39 if [[ -f $file ]];then 40 rm -f $file 41 touch $file&&echo "start finshed" =============>這個其實不需要,用stop和start組合下就好了 42 else 43 touch $file&&echo "start finshed" 44 fi 45 } 46 47 status(){ 48 49 if [[ -f $file ]];then 50 echo "$file is running...." 51 else 52 echo "$file is stoped...." 53 fi 54 } 55 56 57 read -p "input a arg:" i 58 59 case $i in 60 start) 61 start 62 ;; 63 stop) 64 stop 65 ;; 66 restart) 67 stop 68 start 69 ;; 70 status) 71 status 72 ;; 73 *) 74 echo "you should input {start|stop|restart|status}" 75 ;; 76 esac
2 、編寫一個腳本/root/bin/copycmd.sh
(1) 提示用戶輸入一個可執行命令名稱;
(2) 獲取此命令所依賴到的所有庫文件列表
(3) 復制命令至某目標目錄( 例如/mnt/sysroot) 下的對應路徑下;
如:/bin/bash ==> /mnt/sysroot/bin/bash
/usr/bin/passwd ==> /mnt/sysroot/usr/bin/passwd
(4) 復制此命令依賴到的所有庫文件至目標目錄下的對應路徑下:
如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-
linux-x86-64.so.2
(5) 每次復制完成一個命令后,不要退出,而是提示用戶鍵入新的要復制的命
令,并重復完成上述功能;直到用戶輸入quit
1 #!/bin/bash 2 #qiuwei 3 # 2 、編寫一個腳本/root/bin/copycmd.sh 4 #(1) 提示用戶輸入一個可執行命令名稱; 5 #(2) 獲取此命令所依賴到的所有庫文件列表 6 #(3) 復制命令至某目標目錄( 例如/mnt/sysroot) 下的對應路徑下; 7 #如:/bin/bash ==> /mnt/sysroot/bin/bash 8 #/usr/bin/passwd ==> /mnt/sysroot/usr/bin/passwd 9 #(4) 復制此命令依賴到的所有庫文件至目標目錄下的對應路徑下: 10 #如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld- 11 #linux-x86-64.so.2 12 #(5) 每次復制完成一個命令后,不要退出,而是提示用戶鍵入新的要復制的命 13 #令,并重復完成上述功能;直到用戶輸入quit 14 #2為至少輸入一個命令 15 #3為輸入正確的命令 16 copycmd(){ 17 18 if [[ -z $i ]];then 19 echo "please at least input a command"&&exit 20 elif ! type $i &>/dev/null;then 21 echo "$i is not a command,please input a right number"&&exit 22 #判斷是否為命令 23 else 24 cmd=`whereis -b $i|cut -d" " -f2` 25 #取命令文件路徑,設變量 26 dir=`whereis -b $i|cut -d" " -f2|grep -o "/.*/"` 27 #取名文件路徑 28 #echo $cmd 29 libfile=`ldd $cmd |egrep -o "/[^[:space:]]+"` 30 #echo $libfile 31 #取命令所依賴的庫文件列表 32 mkdir -p /mnt/sysroot$dir 33 cp $cmd /mnt/sysroot$dir&& echo -e "\033[32mthe command $cmd mv sucess\033[0m" 34 #復制命令 35 36 for file in $libfile;do 37 dir1=`echo $file|grep -o "/.*/"` 38 #取庫文件路徑 39 mkdir -p /mnt/sysroot$dir1 40 cp $file /mnt/sysroot$dir1 &&echo -e "\033[34mthe libfile $file mv sucess\033[0m" 41 #賦值庫文件 42 done 43 fi 44 read -p "please input a new command:" i 45 } 46 47 48 read -p "please input a command:" i 49 while true ;do 50 51 if [[ $i == quit ]];then 52 exit 53 54 else 55 copycmd 56 fi 57 done
?。。?!以上腳本還不完善,待補充(沒輸入命令或者錯誤命令時要完善)
原創文章,作者:qiuwei,如若轉載,請注明出處:http://www.www58058.com/36986
文章對shell腳本的基礎語法總結的很詳細,shell腳本的學習沒有特別的捷徑,熟悉了基本語法之后剩下的就是多寫多練,可以去網上找一些相對實用的腳本來學習哦。
@馬哥教育:恩,好的