真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

四天精通shell編程(二)

二變量

創(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













分享名稱:四天精通shell編程(二)
轉(zhuǎn)載來源:http://weahome.cn/article/geoodi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部