亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 開發(fā) > Linux Shell > 正文

shell腳本學(xué)習(xí)與總結(jié)

2020-07-27 19:26:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.shell 腳本是區(qū)分小寫的
2.Unix特殊字符有: ( ; $ ? & * () [] ` ‘ “ + 使用其時(shí)要進(jìn)行轉(zhuǎn)義()
3.Shell的注釋以#開頭
4.函數(shù)的定義
Function fuction_name(){
Command to execute
}
調(diào)用時(shí)直接用function_name.
5.控制結(jié)構(gòu)
1)If...then語(yǔ)句
If [ test_command ]
Then
Commands
if
2)If...then...else語(yǔ)句
If [ test_command ]
Then
Commands
Else
commands
if
3)If...then...elif...then...(else)語(yǔ)句
If [ test_command ]
Then
Commands
Elif [ test_command ]
Then
Commands
Else
Commands
Fi
4)for ... In語(yǔ)句
For loop_varible in argument_list
Do
Commands
done
5)while語(yǔ)句
While test_command_is_true
Do
Commands
Done
6)until 語(yǔ)句
Until test_command_is_true
Do
Commands
Done
7)case語(yǔ)句
Case $variable in
Match_1)
Commands_for_1

Match_2)
Commands_for_2

.
.
.
*) #option for other values
Commands_for_no_match

esac
6.break、continue、exit和return語(yǔ)句
Break跳出整個(gè)循環(huán)體,然后執(zhí)行循環(huán)體外接下來(lái)的代碼;
Continue 結(jié)束本次循環(huán),繼續(xù)下次循環(huán);
Exit 退出整個(gè)腳本,一般在其后加入一個(gè)整數(shù)(如exit 0),作為返回代碼發(fā)送給系統(tǒng);
Return 用于在函數(shù)中返回?cái)?shù)據(jù),或返回一個(gè)結(jié)果給調(diào)用函數(shù)
7.here文檔
用于將輸入重定向到某個(gè)交互式shell腳本或程序,而不需要用戶介入。
Program_name << LABLE
Program_input_1
Program_input_2
.
.
Program_input_#
LABLE
注意,程序輸入行中的LABLE標(biāo)記之間是沒有空白的,且輸入的必須是程序所期望的準(zhǔn)確數(shù)據(jù),否則可能會(huì)失效。
8.符號(hào)命令
( )  在一個(gè)子shell中運(yùn)行括號(hào)所括起來(lái)的命令
(( ))  在某個(gè)shell中對(duì)變量進(jìn)行求值和賦值,并進(jìn)行數(shù)學(xué)運(yùn)算
$(( )) 對(duì)括起來(lái)的表達(dá)式進(jìn)行求值
[ ]   與test命令相同
[[ ]]  用于字符串比較
$( )   命令替換
` `    命令替換
9.命令行參數(shù)
命令行參數(shù)$0,$1,$2,...,$9是位置參數(shù),$0指向的是命令本身。
命令shift用于位置參數(shù)向左移動(dòng),如shift命令命令$2成為$1。Shift加入一個(gè)數(shù)字來(lái)移動(dòng)多個(gè)位置,如shift 3使得$4成為$1。shift是一種按照參數(shù)列出順序來(lái)處理每個(gè)位置參數(shù)的良好方式。
10.特殊參數(shù)
$* 指定所有的命令行參數(shù),與$@的意義一樣。兩者只有在加雙引號(hào)時(shí)意義不同,如
“$*”將整個(gè)參數(shù)列表作為一個(gè)參數(shù)來(lái)獲取,”$@”獲取整個(gè)參數(shù)列表,并將它分隔成不同的參數(shù)。
$? 檢查返回代碼。一個(gè)成功執(zhí)行完的命令返回代碼為0,不成功是一個(gè)非0值。
11.雙引號(hào),單引號(hào)和 `(esc下面的按鍵)
單引號(hào)''對(duì)內(nèi)容進(jìn)行全引用,也就是說(shuō),對(duì)變量工命令語(yǔ)句使用文字正文,不進(jìn)行任何替換;而雙引號(hào)則進(jìn)行部分引用,則允許字符替換或命令替換。
`(esc下面的按鍵)用于執(zhí)行某個(gè)命令或腳本并替換其輸出結(jié)果,即命令替換,相同功能有$( )。此外,如果希望每次使用某個(gè)變量時(shí)重新讀取它的值,也可使用它,如`$PWD`,則每次使用這個(gè)變量時(shí)都會(huì)重新讀取它的新值。
12.文件權(quán)限和粘滯位(suid,sgid)
文件權(quán)限有讀,寫,執(zhí)行三種權(quán)限。將文件操作模式設(shè)為總是作為某個(gè)特定的用戶(suid),或總是作為某個(gè)特定的組成員(sgid)來(lái)執(zhí)行稱為設(shè)置粘滯位??梢杂妹頲hmod進(jìn)行修改文件權(quán)限。
13.在遠(yuǎn)程主機(jī)上運(yùn)行命令
Ssh user@hostname command_to_execute
如:ssh jack@192.168.1.3 “uptime”
14.設(shè)置陷阱
當(dāng)某個(gè)程序被迫中止時(shí),會(huì)有一個(gè)退出信號(hào),這個(gè)信號(hào)稱為一個(gè)陷阱(trap)。這樣我們可以在捕捉到退出信號(hào)時(shí)執(zhí)行命令,如捕獲到退出信號(hào)1,2,3,15時(shí)退出:
Trap `echo “nEXITTING on a TRAPPED SINGAL”; exit` 1 2 3 15
注意不能捕獲到kill -9.的退出信號(hào)。
15.查看用戶信息
Who 提供每個(gè)登錄用戶的用戶名、tty、登錄時(shí)間及用戶登錄地(IP)
W 對(duì)who的擴(kuò)展,包括作業(yè)進(jìn)程時(shí)間,總用戶進(jìn)程時(shí)間等,但沒有用戶登錄地信息。
Last 顯示自wtmp文件創(chuàng)建開始登錄過的用戶名單信息,包括登錄時(shí)間,退出時(shí)間,tty等。
    16.ps命令
顯示當(dāng)前系統(tǒng)進(jìn)程的信息。
17.與用戶通信
Wall,rwall,write,talk
18.大小寫文本
用tr或typeset命令。
VALUES = “AFCDLD”
Echo $VALUES | tr ‘[A-Z]' ‘[a-z]'  #將大寫轉(zhuǎn)換成小寫;tr ‘[a-z]' ‘[A-Z]'則小寫轉(zhuǎn)換成大寫

在VALUES前使用
Typeset -l VALUES  #將大寫轉(zhuǎn)換成小寫;typeset -u 則小寫轉(zhuǎn)換成大寫。
19.定時(shí)運(yùn)行腳本cron
Crontab -e進(jìn)入用戶cron表添加定時(shí)腳本,如
在1月15日星期天0:12執(zhí)行腳本/usr/bin/test.sh
#分(0-59) 時(shí)(0-23)日(1-31) 月(1-12) 星期(0-6for Sunday-saturday) 
12 0 15 1 0 /usr/bin/test.sh
定時(shí)任務(wù)還可作用at命令。
20.輸出控制
靜默運(yùn)行,即不輸出任何內(nèi)容到屏幕上: 2>&1 > /dev/null
輸出到系統(tǒng)指定的控制臺(tái): > /dev/console
21.解析命令行參數(shù)getopts
Getopts optionstring VARIABLE
Optionstring 是所需的各種參數(shù),用冒號(hào)隔開,如果不需要參數(shù),則冒號(hào)可以省略。如果optionstring前有一個(gè)冒號(hào),則任何未匹配到時(shí)會(huì)在VARIBLE中加載一個(gè)?號(hào)
使用getopts的作用是解析出參數(shù),然后作用此參數(shù)做不同的操作。如:
While getopts :s:m:h:d:p: TM
Do
Case $TM in
S)
Do something

M)
Do something

.
.
.
?)
Exit 1

Esac
22.逐行處理文件
While read LINE
Do
Echo “$LINE”
Done <$FILENAME
23.作用select命令創(chuàng)建菜單
Select menu in Yes No Quit
Do
Case $menu in
Yes)
Do something

No)
Do something

Quit)
Break

*)
Do something

Esac
done

shell腳本學(xué)習(xí)

1,設(shè)置運(yùn)行環(huán)境

在腳本的頂部寫入:#!/bin/bash2,SHELL中變量與賦值str=hello  
linux中變量不需定義,要用時(shí)直接賦值使用。如:str,注意等號(hào)兩邊不能有空格str=`ls -l /tmp/sh`  如果要把某個(gè)命令的執(zhí)行結(jié)果賦給某個(gè)變量時(shí),=號(hào)右邊要用``括起來(lái)
echo "$str"  
查看變量的值,此處結(jié)果為:hello3,從鍵盤輸入字符或數(shù)值賦給指定的變量read name   如:從鍵盤輸入lishi,則name的值為:lishi4,"",'',``雙引號(hào),單引號(hào),倒引號(hào)之間區(qū)別
echo "my name is $name"
顯示字符串,但含有轉(zhuǎn)義字符引用其變量的值。例中結(jié)果:my name is tom
echo 'my name is $name'
把單引號(hào)中的內(nèi)容原樣顯示出來(lái),結(jié)果:my name is $name
echo `ls -l`  
把倒引號(hào)中字符當(dāng)作命令來(lái)執(zhí)行,并把執(zhí)行結(jié)果顯示出來(lái)。5,加,減,乖,除,求模運(yùn)算。注意要用倒引號(hào)括起來(lái)
expr `5 + 4`
expr `5 - 4`
expr `5 /* 4`
expr `5 / 4`
expr `5 % 4`
如果是在腳本里面進(jìn)行運(yùn)算時(shí),倒引號(hào)要包括=號(hào)右邊全部?jī)?nèi)容。如:sum=0sum=`expr $sum + 1`6,對(duì)文本操作的命令

less 能上下翻
more 能一屏一屏的翻
head 看文本的頭10行  參數(shù)-n 5 表示只顯示頭5行
tail 看文本的尾10行,加 -f參數(shù),能實(shí)時(shí)看日志文件的變化。如看tomcat日志文件變化。tail -f /usr/tomcat/logs/canitsl.out

參數(shù)-n 5 表示只顯示頭5行7,$?表示上一個(gè)命令是否正確執(zhí)行,0表示正常,1表示錯(cuò)誤
ls /tmp/hello,如果/tmp/下沒有hello這個(gè)文件或目錄。則$?為1,反之為08,./test lishi wangwu
$0程序名,$1第一個(gè)參數(shù)的名稱,例中$0為test
$*參數(shù)組成的字符串,例中$*為lishiwangwu
$#傳遞給程序參數(shù)的總數(shù)目,例中$#為29,linux中變量分為全局環(huán)境變量和用戶配置變量
全局環(huán)境變量針對(duì)系統(tǒng)中所有用戶而設(shè)置的工作環(huán)境目錄,在/etc/profile中
用戶配置變量針對(duì)某一用戶的。在用戶登錄的目錄下,.bash_profile中10,重定向重定向就是改變?cè)瓉?lái)輸入輸出的方向,默認(rèn)都是屏幕輸出設(shè)備,鍵盤是輸入設(shè)備?!?gt;”是輸出重定向符?!?lt;”是輸入重定向符?!?gt;”只存放正確的信息,“2>”存放錯(cuò)誤的信息,每次存入前都會(huì)把之前文件內(nèi)容清空再放入如:ls /usr > /tmp/aaa   把/usr目錄下的所有文件和文件夾名稱信息放到期/tmp/aaa文件中。
如:ls /test 2> /tmp/aaa  如果沒有/test文件夾,這時(shí)就會(huì)發(fā)生錯(cuò)誤,那么2>就會(huì)把錯(cuò)誤信息存入aaa文件中。
“>”能創(chuàng)建新文件,如:>hello.java
“>”能清空一個(gè)文件 如hello.java文件中有內(nèi)容,我再>hello.java這時(shí),hello.java內(nèi)容清空“>>”雙大于號(hào)在一起就變成了追加功能,在之前的文件內(nèi)容后面追加內(nèi)容。如:cat /tmp/sh >> /tmp/aaa   把/tmp/sh目錄中的所有文件和目錄信息追加到aaa文件中。aaa文件之前的內(nèi)容不會(huì)被清除。cat > hello.java時(shí),能在屏幕上輸入很多的內(nèi)容,按ctrl+D時(shí)就會(huì)退出。再cat hello.java時(shí)
剛才輸入的內(nèi)容,全在hello.java文件中11,輸入重定向如:cat > a.txt <<EEE,從屏幕上輸入內(nèi)容到a.txt中,直到輸入EEE時(shí)才結(jié)束!!!!像這種結(jié)合方式,經(jīng)常被用在自動(dòng)執(zhí)行記錄某些日志,或者寫入信息時(shí)用到。

SYSPROFILE=/etc/profilecat >> $SYSPROFILE <<EOF
export  JAVA_HOME=/usr/java/jsdk
export  JAVA_OPTS="-Xms64m -Xmx768m"
export  PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin::$PATH
export  CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EOF12,管道管道:把前一個(gè)命令的輸出作為下一個(gè)命令的輸入。顧名思義就是連接前后兩個(gè)管道的作用。
把上一個(gè)管道的尾與下一個(gè)管道的頭相連接。ls -l /tmp/test | wc -l     統(tǒng)計(jì)/tmp/test目錄中共有多少個(gè)文件和目錄。把/tmp/test目錄中文件和目錄按列顯示。并把顯示出來(lái)的結(jié)果作為wc -l命令的信息源。13,條件判斷語(yǔ)句字符串比較:=,!=,-n:判斷字符串長(zhǎng)度是否大于0,大于0則為真,-z:判斷字符串長(zhǎng)度是否等于0,等于0則為真
數(shù)字比較:-eq相等, -ge大于等于,-le小于等于,-ne不等于,-gt大于,-lt小于
邏輯判斷:!非,&&與,||或
文件判斷:-d目錄判斷,-f文件判斷,-r可讀,-w可寫,-x可執(zhí)行test 條件1 比較符 條件2  如:test 1 -eq 1
[ 條件1 比較符 條件2 ]   如:[1 -eq 1 ],[ -n "" ]
[ `who | wc -l` -le 10 ]&& echo "YES"  判斷當(dāng)前系統(tǒng)的登錄用戶數(shù)是否小于等于10,是,則輸出YES

16,循環(huán)語(yǔ)句:

while 條件為真時(shí),執(zhí)行
do
..
done例:j=1
while((j<=10)) 或者while [ j -le 10 ]
do
echo "j=$j"
j=`expr $j + 1
done if語(yǔ)句:
if            
then       
else       此處也可elif與fi再嵌套 
fi        例:x=4;y=7if [ $x -eq $y ]
then
echo "相等"
else
echo "不相等"
fi case 變量 in
數(shù)值1) 語(yǔ)句 ;;
數(shù)值2) 語(yǔ)句 ;;
*) 語(yǔ)句 ;;  #如果數(shù)值不在范圍之中,就執(zhí)行這一行例:USER=whoamicase $USER in
lishi)
echo "you are LISHI";
echo "Welcome ";;
root)
echo "you are ROOT"
echo "hi root ";;
admin)
echo "you are admin";
echo "admin,hello ";;*)echo "當(dāng)前用戶不是lishi,root,admin";;
esac for 循環(huán)例:用FOR循環(huán)顯示/tmp/sh目錄中的每個(gè)文件信息。變量i的取值是/tmp/sh目錄中的每個(gè)文件如for i in "a" "b" "c",此時(shí)變量i每次循環(huán)的取值為a,b,cpath=/tmp/sh/
for i in `ls $path`
do
ls -l  $i
done例:#用for與if相結(jié)合的手法,顯示出從1到鍵盤輸入數(shù)之間的偶數(shù)
#注意if語(yǔ)句的雙括號(hào)read x
for((i=1;i<=$x;i++))
do
if [ $i % 2 == 0 ]
then
echo "$i"
fi
done14,函數(shù)# 定義一個(gè)累加的函數(shù)sum, 再?gòu)逆I盤上輸入兩個(gè)數(shù),再調(diào)用sum函數(shù)
# 注意,函數(shù)一定要放在調(diào)用該函數(shù)的前面sum()
{
a=$x
b=$y
total=`expr $a + $b`
echo "total = $total"
}echo "please enter two number:"
read x
read y
sum $x,$y
shell  start:

shell有bsh,bash,cash等

1,在linux中管理員用戶登錄進(jìn)去時(shí),提示符為:#,一般用戶登錄進(jìn)去時(shí)的提示符為:$
登錄進(jìn)去后,退出或要切換用戶時(shí),用:exit命令,正常退出。
2,查看當(dāng)前系統(tǒng)中的shell版本,在/etc/shell目錄中查看。
3,在系統(tǒng)中查看不同用戶默認(rèn)的shell版本,/etc/passwd  查看當(dāng)前用戶的shell,echo shell
4,直接用命令改變某個(gè)用戶的shell環(huán)境:chsh 系統(tǒng)用戶名,根據(jù)提示輸入新shell路經(jīng),如:/bin/bash
5,查看當(dāng)前用戶的環(huán)境變量和ID號(hào),set | grep user,set | grep uid  或,查看/etc/passwd文件
6,查看某個(gè)命令在哪個(gè)位置  which 命令  如:which ifconfig   當(dāng)某些一般用戶中有些命令提示無(wú)法找到
或執(zhí)行時(shí),一般是環(huán)境變量中沒有把該命令的路經(jīng)加進(jìn)來(lái)。用export命令設(shè)置環(huán)境變量
7,查看以前使用過的命令 history   history -c清除之前使用過的命令
8,;在shell中用來(lái)區(qū)分一個(gè)命令的結(jié)束。一行中可以多個(gè)命令
9,調(diào)試shell腳本用. 腳本文件名  或 bash 腳本文件名
10,文件權(quán)限分三類:
a,文件屬主:創(chuàng)建該文件的用戶
b,同組用戶:擁有該文件的用戶組中的任何用戶
c,其它用戶:即不屬于擁有該文件的用戶組的某一用戶
如:-rwxr-xr-x 1 root root  217 08-10 19:51 test1.sh
第一個(gè)字符表示文件的類型,是文件夾,還是普通文件 例中-表示普通文件
后面的9個(gè)字符分三段,第一段是文件屬主的權(quán)限
第二段是同組用戶的權(quán)限,第三段是其它用戶的權(quán)限
賦權(quán)限:g是代表同組用戶,o是代表其它用戶
chmod go+wx ./test.sh  給同組用戶和其它用戶賦寫和執(zhí)行的權(quán)限 
chmod u+wr ./test.sh  給自己賦讀和寫權(quán)限
chmod o+wrx ./test.sh   給其它用戶賦讀,寫和執(zhí)行的權(quán)限
去權(quán)限與賦權(quán)限同理,只是把“+”換成“-”就可以了
chmod go-rw ./b.c  把同組用戶和其它用戶讀和寫的權(quán)限去除

11,一般權(quán)限也可以用數(shù)字表示:4:讀,2:寫,1:執(zhí)行,
如果用數(shù)字給某一個(gè)文件賦權(quán)限,要寫3段數(shù)字,如:764,則表示
用戶自己是讀寫執(zhí)行,同組用戶是讀寫,其它用戶是讀的權(quán)限。
12,給文件和文件夾賦權(quán)限時(shí),兩者互不干擾,除非在給文件夾賦權(quán)限時(shí)帶-R參數(shù)
那么,該文件夾下的所有內(nèi)容就賦予了和文件夾一樣的權(quán)限了,小心使用-R
13,查看文件夾權(quán)限時(shí),用:ll -d /tmp/sh    -d是查看文件夾的,不然只會(huì)
列出該文件夾的內(nèi)容了。

14,改變文件的所屬用戶,chown oracle /tmp/sh/api.sh
   改變文件的所屬組,chown :oracle /tmp/sh/api.sh
同時(shí),改變文件的所屬用戶和組,chown oracle:dba /tmp/sh/api.sh  那么api.sh的所屬用戶和組信息為:
-rwxrwxr-x 1 oracle dba 264 07-28 15:57 /tmp/sh/api.sh
15,id  命令,查看當(dāng)前是哪個(gè)用戶,以及哪個(gè)組的相當(dāng)信息
16,groups 查看系統(tǒng)當(dāng)前有多少個(gè)組,groups 用戶名 如:groups oracle,查看用戶所屬組
17,getent group 組名  如:getent group dba  查看dba組中有哪些用戶
18,創(chuàng)建一個(gè)用戶并把它加入到指定組中 useradd wangcai -G root

19,當(dāng)一個(gè)腳本需要以擁有者或組的用戶執(zhí)行時(shí),需要用到suid,guid
文件設(shè)置了suid或guid時(shí),如果該文件沒有執(zhí)行權(quán)限,那么設(shè)置suid或guid時(shí)就沒有意思,會(huì)用大寫"S"
表示。4代表suid,2代表guid
如:start-orcl.sh 例子,首先用chown改變文件所屬用戶,再用chmod改變文件suid和guid的權(quán)限
-rwxr-xr-x 1 root root  632 08-15 17:31 start-orcl.sh
chown oracle start-orcl.sh
-rwxr-xr-x 1 oracle root  632 08-15 17:31 start-orcl.sh
chmod 6751 start-orcl.sh
-rwsr-s--x 1 oracle root  632 08-15 17:31 start-orcl.sh

20,用指定的用戶身份執(zhí)行一個(gè)腳本 su - oracle -c "/tmp/sh/start-orcl.sh"
以oracle的身份執(zhí)行start-orcl.sh這個(gè)腳本
21,創(chuàng)建快捷方式 ln -s /tmp/sh 1  創(chuàng)建快捷方式1指向/tmp/sh,訪問1相當(dāng)于訪問/tmp/sh一樣。
22,定時(shí)任務(wù):
用 service crond status 查看 cron服務(wù)狀態(tài),如果沒有啟動(dòng)則 service crond start啟動(dòng)它。
基本用法:
crontab -l
列出當(dāng)前的crontab任務(wù)
crontab -d
刪除當(dāng)前的crontab任務(wù)
crontab -e (solaris5.8上面是 crontab -r)
編輯一個(gè)crontab任務(wù),ctrl_D結(jié)束
crontab filename
crontab的格式為:分 時(shí) 日 月 星期 命令(中間用空格隔開)。
    crontab文件的條目是從左邊讀起的,第一列是分,以此類推,最后一列是需要執(zhí)行的命令。
    每一列稱為crontab的一個(gè)域,在這些域中,可以用-來(lái)連接一個(gè)時(shí)間范圍,例如星期一到星期五,可以用1-5來(lái)表示。
    單個(gè)時(shí)間點(diǎn)可以用,號(hào)分隔,比如星期一和星期四,那么可以表示為1,4。如果某個(gè)表示時(shí)間的域沒有特別限制,可以用*號(hào)表示。每一個(gè)時(shí)間條目包含5個(gè)域,用空格隔開。
    比如我希望每天晚上21:30運(yùn)行bin目錄下的cleanup.sh文件,那么該命令就應(yīng)該為:
    30 21 * * * /app/bin/cleanup.sh (注意:由于不需要限定日期、月份、星期,所以日期、月份和星期域用*號(hào)表示)
    比如我希望每月得1、10、20的00:00運(yùn)行backup.sh文件,那么命令應(yīng)該為:
    00 00 1,10,20 * *  /app/bin/backup.sh (注意:由于不需要限定月份和星期,所以月份和星期域用*號(hào)表示)
    #每?jī)蓚€(gè)小時(shí)
    0 */2 * * * date
    crontab -e 然后在打開的文件中編輯內(nèi)容,如:0 */2 * * * date,保存退出。
    也可以把如: 0 */2 * * * date的內(nèi)容,放到一個(gè)filename文件中,再用crontab filename
    把內(nèi)容加到crontab中,這時(shí)用crontab -l也可以看到filename文件中的內(nèi)容。
讓配置文件生效:如果讓配置文件生效,還得重新啟動(dòng)cron,切記,既然每個(gè)用戶下的cron配置文件修改后。
也要重新啟動(dòng)cron服務(wù)器,/etc/init.d/crond restart 。編輯/etc/crontab文件,在末尾加上一行: 30 5 * * * root init 6 這樣就將系統(tǒng)配置為了每天早上5點(diǎn)30自動(dòng)重新啟動(dòng)。
需要將crond設(shè)置為系統(tǒng)啟動(dòng)后自動(dòng)啟動(dòng)的服務(wù),可以在/etc/rc.d/rc.local 中,在末尾加上
service crond start
如果還需要在系統(tǒng)啟動(dòng)十加載其他服務(wù),可以繼續(xù)加上其他服務(wù)的啟動(dòng)命令。
比如: service mysqld start

shell腳本學(xué)習(xí)小結(jié)

1.字符截?cái)啵?

如果是一般路徑的字符截?cái)嗫梢杂胋asename 和dirname 這兩個(gè)工具:
basename 可以從一個(gè)文件路徑中截一個(gè)文件名
例如:
$ basename /home/file.tar
file.tar
dirname 可以從一個(gè)文件路徑中截到一個(gè)目錄路徑
例如:
$ dirname /home/file.tar
/home
不使用外部工具進(jìn)行字符截?cái)?
bash 有自帶的功能來(lái)對(duì)變量進(jìn)行字符截?cái)?,一般使?##","#","%%","%","*" 組
合來(lái)實(shí)現(xiàn)。例如:

復(fù)制代碼 代碼如下:

$ string=hellowbashshell
$ echo ${string##*sh}
ell
$ echo ${string#*sh}
shell
$ echo ${string%%sh*}
hellowba

----------------------- Page 2-----------------------
$ echo ${string%sh*}
hellowbash
"#"表示從字符開始部分除去,一旦匹配則立即除去
"##"表示從字符開始部分除去,會(huì)搜整個(gè)字符串最長(zhǎng)的和的匹配來(lái)除去
"%"表示從字符結(jié)束的部分除去,一旦匹配成公則立即除去
"%%"表示從字符結(jié)束的部分開始除去,會(huì)搜尋整個(gè)字符穿中最長(zhǎng)的匹配來(lái)除去
"*"統(tǒng)配符,一般與“##”或"#"聯(lián)用時(shí)放在搜索字符串的左邊,例如:${String#*sh}(在sh 的左
邊),與"%%"或"%"聯(lián)用時(shí)會(huì)放在匹配字符串的右邊,例如:${String%%sh*}
常用技巧:
在路徑中取文件名:${path##*/} (與basename 相同功能)
在路徑中取目錄路徑:${path%/*}(與dirname 相同功能)
取文件的擴(kuò)展名:${path##*.}
2. 自變量的接收
接收來(lái)自命令行傳入的參數(shù),第一個(gè)參數(shù)用$1 表示,第二個(gè)參數(shù)$2 表示,。。。以此類推。
注意:$0 表示腳本文件名。另外一個(gè)在shell 編程中經(jīng)常用到的是“$@”這個(gè)代表所有的參
數(shù),。你可以用一個(gè)循環(huán)來(lái)遍歷這個(gè)參數(shù)。如果用java 來(lái)類比的話,可以把$@看作是man
函數(shù)中定義的那個(gè)數(shù)組
3.if 語(yǔ)句:
格式:
if [ condition ]
then
action
fi
注意:“if”和“[”之間需要空格,如果你不空格,shell會(huì)報(bào)告語(yǔ)法錯(cuò)
誤的。我就被這個(gè)浪費(fèi)了好一陣時(shí)間
----------------------- Page 3-----------------------
conditon 測(cè)試類型對(duì)照表
運(yùn)算符 描述 示例
文件比較運(yùn)算符
-e filename 如果filename 存在,則為真 [ -e /var/log/syslog ]
-d filename 如果filename 為目錄,則為真[ -d /tmp/mydir ]
-f filename 如果filename 為常規(guī)文件,則[ -f /usr/bin/grep ]
為真
-L filename 如果filename 為符號(hào)鏈接,則[ -L /usr/bin/grep ]
為真
-r filename 如果filename 可讀,則為真 [ -r /var/log/syslog ]
-w filename 如果filename 可寫,則為真 [ -w /var/mytmp.txt ]
-x filename 如果filename 可執(zhí)行,則為真[ -L /usr/bin/grep ]
filename1-nt 如果filename1 比f(wàn)ilename2 [ /tmp/install/etc/services -nt
filename2 新,則為真 /etc/services ]
filename1-ot 如果filename1 比f(wàn)ilename2 [ /boot/bzImage -ot
filename2 舊,則為真 arch/i386/boot/bzImage ]
字符串比較運(yùn)算符 (請(qǐng)注意引號(hào)的使用,這是防止空格擾亂代碼的好方法)
-z string 如果string 長(zhǎng)度為零,則為真 [ -z "$myvar" ]
-n string 如果string 長(zhǎng)度非零,則為真 [ -n "$myvar" ]
string1= string2 如果string1 與string2 相同,[ "$myvar" = "one two three" ]
則為真
string1!= string2 如果string1 與string2 不同,[ "$myvar" != "one two three" ]
則為真
算術(shù)比較運(yùn)算符
num1-eq num2 等于 [ 3 -eq $mynum ]
num1-ne num2 不等于 [ 3 -ne $mynum ]
num1-lt num2 小于 [ 3 -lt $mynum ]
num1-le num2 小于或等于 [ 3 -le $mynum ]
num1-gt num2 大于 [ 3 -gt $mynum ]
num1-ge num2 大于或等于 [ 3 -ge $mynum ]
感覺bash 中的if 相比其他的一些語(yǔ)言智能多了,在bash 中,測(cè)試一個(gè)文件的存在跟比較
兩個(gè)數(shù)字的大小沒有什么兩樣 ;)
----------------------- Page 4-----------------------
4.for 語(yǔ)句
bash 里的語(yǔ)句總是那么的人性化,十分的接近自然語(yǔ)言,在for 語(yǔ)句中幾乎可以
迭代任何類似與集合的數(shù)據(jù)類型(或許這樣個(gè)說(shuō)法不對(duì),但我確實(shí)想不到更好的
詞來(lái)代替)。
看一個(gè)例子:
#!/bin/bash
for args in $@
do
echo $args
done
把上面這段代碼錄入保存為showargs.sh 設(shè)置為可執(zhí)行(chmod +x showargs.sh)
執(zhí)行:
$ ./showargs.sh arg1 arg2 arg3 arg4
arg1
arg2
arg3
arg4
這個(gè)例子中,我們用到了之“$@”,它代表了所有的命令行參數(shù)。在這里用for
對(duì)其進(jìn)行遍歷,系統(tǒng)迭代地從$@中取出命令行參數(shù)把他放到args 中,最后使用
echo $args 進(jìn)行輸出。
for 更經(jīng)常用到的是遍歷目錄,下面的例子用于列出當(dāng)前目錄下的所有文件和文
件夾的名稱
復(fù)制代碼 代碼如下:

$ for file in *
> do
> echo $file
> done

這里用*代表當(dāng)前目錄,列出的是所有的文件和文件夾的名稱,在這里,文件夾
和文件你是分不出來(lái)的,如果你需要,你應(yīng)該用if [-d ${file}]來(lái)做一下判斷。
----------------------- Page 5-----------------------
對(duì)于文件遍歷,更有趣的是,你可以在 “in” 后面接上多個(gè)表達(dá)式。也就是說(shuō),
你可以一次在遍歷多個(gè)目錄。
下面這段代碼能把當(dāng)前目錄下go 文件夾和do 文件夾里的文件復(fù)制到fo 文件夾

復(fù)制代碼 代碼如下:

#!/bin/bash
for args in ./go/* ./do/*
do
cp ${args} ./fo
echo "copying ${args} to ./fo/${args}"
done

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲欧美日韩一区在线观看| 免费无码毛片一区二三区| 国产精品成熟老女人| 高清美女视频一区| 美女视频黄a大片欧美| 麻豆av免费观看| 精品在线免费观看| 日韩成人免费av| 中文字幕xxx| 久草视频在线资源站| 三级精品视频久久久久| 国产成人日日夜夜| 日本韩国精品一区二区| 久久av最新网址| 91香蕉视频在线观看视频| 国产三级av片| 久久久精品久久久| av色综合久久天堂av综合| 国产91在线高潮白浆在线观看| 美女久久网站| 九色视频九色自拍| 日韩a级大片| 老司机久久精品| 欧美97人人模人人爽人人喊视频| 欧美毛片免费观看| 久久日一线二线三线suv| 国产福利一区二区三区在线观看| 国产精品qvod| 18视频免费网址在线观看| 国产日产一区二区| 精品999日本久久久影院| 色婷婷激情综合| 一区二区精品视频在线观看| 中国黄色a级片| 蜜桃传媒视频麻豆第一区免费观看| 精品视频麻豆入口| 97久久久久久久| 日韩精品午夜| 国产视频在线观看一区二区| 亚洲国产精品欧美一二99| 亚洲 激情 在线| 色吊丝在线永久观看最新版本| 131美女爱做视频| 免费一区二区在线观看| 亚洲国产成人在人网站天堂| 97久久超碰福利国产精品…| 日本伦理一区二区三区| 色婷婷狠狠综合| 日韩欧美xxxx| 国产露出视频在线观看| jizzjizzjizzjizz日本老师| 精品自拍偷拍视频| 久草在线资源福利站| 国产91精品免费| 久久99九九99精品| 蜜桃免费一区二区三区| 色www精品视频在线观看| 一区二区三区在线观看www| 国产三区视频在线观看| 爱草在线视频| 成年人网站免费在线观看| 视频一区欧美| 欧美日韩一区小说| 亚洲人成小说网站色在线| 丁香婷婷综合激情五月色| 四色永久免费网站| 91成人免费观看| 国产a一区二区| 999久久欧美人妻一区二区| www.国产福利| 欧美日韩不卡在线| 国产精品激情av电影在线观看| 久久大胆人体视频| 中文字幕亚洲欧美在线| 26uuu另类亚洲欧美日本一| 国产一级视频在线| av女名字大全列表| 精品在线播放| 色综合一区二区三区| 国产精品免费在线视频| 日日摸夜夜添一区| 91嫩草|国产丨精品入口| 亚洲国产精品精华液ab| 亚洲尤物在线| 成人黄色一级大片| 黄色的网站在线观看| 美国av一区二区| 亚洲天堂一二三| 国产喷水福利在线视频| 999视频在线免费观看| 成年人二级毛片| 欧美成a人片免费观看久久五月天| 亚洲电影在线免费观看| 911精品产国品一二三产区| 二人午夜免费观看在线视频| 久久国产波多野结衣| 三级网站在线播放| 亚洲AV无码久久精品国产一区| 伊人免费视频二| 视频一区视频二区视频三区高| 成人免费福利片| 精品国产一二三四区| 国产亚洲成aⅴ人片在线观看| 国产亚洲一区二区三区在线播放| 日本高清在线观看视频| 国产精品一码二码三码在线| 国产亚洲精品一区二555| 日本高清不卡在线| 555www成人网| 国产日韩精品一区二区三区在线| 99久久99精品久久久久久| 中文字幕日韩精品一区| 91精品福利视频| 亚洲免费小视频| 国产精品国产三级国产有无不卡| 欧美三区免费完整视频在线观看| 成人无码精品1区2区3区免费看| 8av国产精品爽爽ⅴa在线观看| 一本色道69色精品综合久久| 国产欧美在线看| 日韩一区二区三区四区区区| 国产日本一区二区| 久久久无码精品亚洲日韩按摩| 2020国产精品极品色在线观看| 涩涩漫画在线观看| 国产中文字幕乱人伦在线观看| 亚洲一区二区在线| 日韩123区| 在线观看91久久久久久| 2019日韩中文字幕mv| 小黄文在线观看| 天堂在线观看免费视频| 欧美乱大交xxxxx免费| 亚洲午夜久久| 亚洲一本二本| 丁香花五月婷婷| 999国产精品999久久久久久| 亚洲无中文字幕| 欧美男男gaytwinkfreevideos| 伊人久久综合影院| 可以免费在线观看的av| 精品亚洲成a人| 精品欧美日韩| 国产日韩av网站| 99久久精品免费看国产小宝寻花| 丰满人妻一区二区三区免费视频| 国产精品天天看| 黄色一级免费视频| 久久精品成人一区二区三区蜜臀| 亚洲黄色影院| 精品视频免费在线播放| 国外成人福利视频| 91啦中文成人| 欧美精品色婷婷五月综合| 美女黄色片视频| 国产伦精品一区二区三区| 国产麻豆一区二区三区在线观看| 在线观看免费视频你懂的| 精品人妻一区二区三区蜜桃视频| 亚洲欧洲另类精品久久综合| 国产性猛交xxxx免费看久久| 国产一区二区自拍| 亚洲欧美久久久久一区二区三区| 色综合天天狠天天透天天伊人| 九色91在线视频| 国产精品自产拍在线观看| 另类色图亚洲色图| 欧美一级免费观看| 日韩在线高清| 天天色天天综合| 亚洲综合在线观看视频| 狠狠干婷婷色| 伊人久久久久久久久久久久久久| 日产精品99久久久久久| 爱爱的免费视频| 成人av电影免费| 久久久久免费看| 欧美三级电影一区二区三区| 精品国产一区二区三区成人影院| 国产成人精品一区二区免费看京| 在线观看免费视频一区| 欧美一区二区少妇| 日韩在线不卡| 国产伦理一区二区| 热99re久久精品精品免费| 国产精品久久久久久久久免费| 国产人与禽zoz0性伦| 精品成人私密视频| 成人免费视频国产免费| 91精品国产91久久久久久最新| 亚洲午夜剧场| 高h视频免费观看| 久久精品国产精品亚洲精品色| 日本韩国欧美超级黄在线观看| 欧美一区二区三区爽爽爽| www.欧美黄色| 在线观看视频一区二区欧美日韩| 天堂一区二区三区四区| 亚洲性日韩精品一区二区| 亚洲一区二区三区在线观看视频| 久久久久久久久一| 免费看av大片| 91欧美在线| 制服 丝袜 综合 日韩 欧美| 九七电影院97理论片久久tvb| 国产农村老头老太视频| 欧美日韩电影在线播放| 色天天色综合| 亚洲一区在线| 午夜精品久久久久| 一区二区91美女张开腿让人桶| 蝌蚪91视频| 成人视屏在线观看| 精品视频一区二区三区免费| 日韩在线视频网站| 国产一级二级三级视频| 欧美在线精品免播放器视频| 黄上黄在线观看| 久久超碰97人人做人人爱| 成人精品视频在线| 日本一本在线观看| 老牛国产精品一区的观看方式| 日本69式三人交| 国产精品一二三视频| 欧美mv和日韩mv的网站| 男男视频亚洲欧美| 欧美一区二区久久| 天天好比中文综合网| 久久成人福利| 欧美精品一区二区三区高清aⅴ| 国产成人一区二| 亚洲黄色一区二区| 国产国语刺激对白av不卡| 在线看av的网址| 三级精品在线观看| 国产精品色婷婷在线观看| 999久久久免费精品国产牛牛| 韩国av永久免费| av网站免费在线看| 妞干网在线观看视频| av女同在线| 日韩视频一区二区三区在线播放| 一区二区三区产品免费精品久久75| 亚洲男人天堂2021| 人人干人人插| 日本黄色录像片| 奇米网人体黄视频| 国产精品久久中文字幕| 欧洲成人一区| www欧美日韩| 欧美性xxxxx极品视频| 色综合综合色| 亚洲人av在线影院| 丝袜美腿综合| 中文字幕不卡三区视频| 丁香婷婷久久| 成人动漫在线观看视频| 免费观看成人高| 国产美女久久精品| 北岛玲一区二区三区四区| 欧美日韩亚洲精品一区二区三区| 精品国产一区二区三区成人影院| 91官网在线| 岛国视频午夜一区免费在线观看| 3d动漫精品啪啪| 亚洲精品在线三区| 精品欧美在线观看| 国产三级欧美三级| 91精品导航| av黄色在线| 免费视频二区| 亚洲精品.www| 日本一区二区黄色| 蜜桃特黄a∨片免费观看| 亚洲视频日韩精品| 国产美女明星三级做爰| 久久高清免费观看| 非洲一级黄色片| 麻豆一区区三区四区产品精品蜜桃| 欧美成人激情图片网| 一色屋色费精品视频在线看| 亚洲自拍偷拍福利| 亚洲人成网站999久久久综合| 日韩在线视频观看免费| 四虎永久在线精品| www.日韩大片| 国产v片免费观看| 一区二区三区四区高清精品免费观看| 国产资源中文字幕| 一区二区三区免费在线观看视频| 久久99国产综合精品免费| 六月婷婷激情综合| 青青草97国产精品免费观看无弹窗版| 亚洲高清在线不卡| 亚洲精品男人天堂| 亚洲电影激情视频网站| 欧美日韩三级视频| 亚洲欧洲成人| 亚洲美女视频在线免费观看| 国产日韩精品久久| 另类视频一区二区三区| 四虎影视2018在线播放alocalhost| 亚洲小视频在线| 中文字幕亚洲情99在线| 欧美日韩综合| 狠狠操第一页| 欧美性猛交xxxx乱大交少妇| 亚洲一区二区视频在线观看| 中文字幕在线观看网站| 国产亚洲欧洲一区高清在线观看| 人人超碰91尤物精品国产| 久久精品亚洲无码| 啪一啪鲁一鲁2019在线视频| 色网站免费在线观看| 在线免费观看你懂的| 日韩av电影免费观看高清| 国产精品成人**免费视频| thepron国产精品| 免费看污黄网站| 国产综合色精品一区二区三区| 日本国产欧美一区二区三区| 国产精品九色蝌蚪自拍| 亚洲免费成人| 日韩免费视频在线观看| 91久久久久久久久久久| 一区二区三区视频在线免费观看| 国产精品日韩欧美一区| 国产激情综合|