二變量
創(chuàng)新互聯(lián)公司專注于肅南裕固族自治企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,成都商城網(wǎng)站開發(fā)。肅南裕固族自治網(wǎng)站建設(shè)公司,為肅南裕固族自治等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì)網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
5位置參數(shù)變量
$0命令自己
$1第一個(gè)參數(shù)
$2第二個(gè)參數(shù)
$9第九個(gè)參數(shù)
例2:輸出位置參數(shù)變量,腳本后要接參數(shù)
#!/bin/bash
echo"the command is $0"
echo"canshu1 is $1"
echo"canshu2 is $2"
6預(yù)定義變量
$?上一個(gè)命令的返回值:0上一個(gè)命令正確執(zhí)行;非0上一個(gè)命令不正確
$#統(tǒng)計(jì)命令之后的參數(shù)個(gè)數(shù)
$*返回所有參數(shù)
$n位置參數(shù)變量
例3:輸出預(yù)定義變量
#!/bin/bash
#名字為:canshu.sh
echo"canshu zongshu $#"
echo"canshu liebiao: $*"
echo $?
附:
對其賦予執(zhí)行權(quán)限:chmod755 canshu.sh
執(zhí)行:./canshu.sh2 2 3 4 5 6
7鍵盤讀取命令
read -p “提示信息”-t等待時(shí)間 變量名
例子4:通過read讀入變量值
#!/bin/bash
read-p "please input num1:" -t 30 test1
read-p "input num2:" -t 30 test2
sum=$(($test1 + $test2))
echo“num1 + num2 = $sum”
8數(shù)值運(yùn)算
變量值默認(rèn)都是字符串型,要想進(jìn)行數(shù)值運(yùn)算。以下三種任選一種
1)declare方法
num1=123
num2=456
declare-i sum=$num1+$num2
2)sum=$(($num1 + $num2 )) #推薦
附:
$():說明括號里為系統(tǒng)命令,他會執(zhí)行系統(tǒng)的命令
3)sum=$(expr$num1 + $num2)注意+左右必須空格,不然會發(fā)生錯(cuò)誤如:打?。?23+456#字符串疊加
4)運(yùn)算符
+ - \* / %取余
附:
shell編程的目的是為了減輕系統(tǒng)管理員的任務(wù)
shell腳本可能寫不出漂亮的界面,但是他不是用來干這個(gè)的→ 各種編程語言都有他特殊的應(yīng)用面,比如說C語言就比VB在數(shù)值計(jì)算方面更加精確,而VB則在界面方面比C更勝一籌
shutdown-r now #系統(tǒng)重啟
三 shell中常用命令
1行提取命令grep
選項(xiàng): -v反向選擇
-n提取時(shí),顯示行號
舉例:
grep "[^a-z]hen" test.txt
oo前不是小寫字母的行匹配。注意:和開頭沒有關(guān)系
附:也可以結(jié)合以前的內(nèi)容:grep-n "[^a-z]hen" test_rule.txt
中括號代表一個(gè)字母,^代表取反,a-z代表小寫字母a到z
grep “\.$” test.txt
匹配以.結(jié)尾的行
附:在正則表達(dá)式中$代表行尾;
\代表轉(zhuǎn)義符,表示,將其后緊跟字符的特殊含義消失!
Linux中行尾的空格附,也可以作為一個(gè)字符,一定要記?。∵@是一些腳本發(fā)生錯(cuò)誤的原因!
grep "^[^A-Za-z]" test.txt
匹配不以字母開頭的行注意:所有字母不能這樣寫A-z
附:
^在中括號外面代表行首
grep"^[^a-zA-Z]" test_rule.txt #這樣也可以
grep “^$” test.txt
匹配空白行
grep "oo*" test.txt
匹配最少一個(gè)o
附:o*代表著*前面的這個(gè)o可以重復(fù)0到無數(shù)多次
還可以這樣用:grep"hh*o" test_rule.txt
這樣:grep"ooo" test_rule.txt
2列提取命令
1) cut
cut -d “分隔符”-f提取列 文件名
如:cut-d ":" -f 1,3 /etc/passwd
more/etc/passwd | grep "/bin/bash" | cut -d ":" -f1,3
提取passwd文件中可以登錄的用戶的用戶名和UID
附:這里1,3之后就不用加文件名了
last命令用于查看那個(gè)用戶,在那個(gè)端口等信息下登錄到系統(tǒng),是一個(gè)日志命令
2) awk
awk '條件{動作}'
last| awk '{printf $1 "\t" $3 "\n"}' # $1代表第一列
提取last顯示結(jié)果的第一和第三列
\t tab鍵
\n換行
\r回車
附:也可以是:last| awk '{printf $1 "\t" $3 "\t" $4 "\n"}'
last| grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"| awk '{printf $1 "\t" $3 "\n"}'
在last中提取包含ip的行,然后,再在行中提取第一和第三列
awk內(nèi)置變量 FS指定分隔符
more/etc/passwd | awk 'BEGIN {FS=":"} {printf $1 "\t"$3 "\n"}'
讀取passwd文件,以":"為分隔符,截取第一和第三列
BEGIN在截取前使分隔符生效。如果沒有BEGIN,那么第一行自定義的分隔符不生效
6 echo命令
echo -e “輸出內(nèi)容”
-e識別格式化打印內(nèi)容
echo -e “1\t2\t3”打印tab鍵
echo -e "\e[1;31m this is red text \e[0m"輸出紅色字體
\e[格式標(biāo)志
1;31m指定顏色#30到39之間的數(shù)字
0m恢復(fù)顏色(重置)
附:30m=黑色,31m=紅色,32m=綠色,33m=×××,34m=藍(lán)色,35m=洋紅,36m=青色,37=白色
echo -e “\e[1;42 background \e[0m”
附:背景顏色:40=黑色,41=紅色,42=綠色,43=×××,44=藍(lán)色,45=洋紅, 46=青色,47=白色
例子5:echo輸出的小游戲
注: cat -A文件名顯示文件隱,包括藏字符
取消dos文檔的回車符,兩種辦法
1)dos2unix文檔名#unix2dos方向相反
2)vi -b文檔
:%s/^M//g ^M使用ctrl+v+m輸入
例6:數(shù)據(jù)備份
#!/bin/bash
DAY=`date+%Y%m%d` #反引號?。?!
#定義日期變量
附:DAT=$(date+%F) #更方便且更漂亮,打印出:2013-12-21
SIZE=`du-sh /var/lib/MySQL`
#定義mysql目錄大小的變量,``符號可以換成$()
附:sudodu -sh /etc/ #統(tǒng)計(jì)/etc/目錄的大小
echo"Date: $DAY" >> /tmp/dbinfo.txt
#把日期輸入信息文檔
echo"Data Size: $SIZE" >> /tmp/dbinfo.txt
#把大小輸入信息文檔
cd/opt/dbbak
#切換目錄
tarzcf mysqlbak-${DAY}.tar.gz /var/lib/mysql /tmp/dbinfo.txt
打包備份mysql目錄,同時(shí)打包信息文檔
附:在字母zc后加v會顯示壓縮過程
rm-f /tmp/dbinfo.txt