bash和sed简要介绍和相关范例
?一、bash 中如何進(jìn)行條件測(cè)試:
?? 有三種類型的測(cè)試:整數(shù)測(cè)試、字符串測(cè)試、文件測(cè)試
?? 1.整數(shù)測(cè)試:
???????????? -eq?? 左邊的值是否等于右邊
???????????? -gt?? 左邊的值是否大于右邊?
???????????? -ge?? 左邊的值是否大于等于右邊
???????????? -lt?? 左邊的值是否小于右邊
??????????? ?-le?? 左邊的值是否小于等于右邊
???????????? -ne?? 左邊的值是否不等于右邊
??? 2.字符串測(cè)試:
?????????????? == 也可以寫成=????? 左右兩個(gè)字符串是否相同
?????????????? !=???????????????? 左右兩個(gè)字符串是否不同
?????????????? -z?????????????????? 查看字符串是否為空
?????????????? -n?????????????????? 查看字符串是否不為空
??? 3.文件測(cè)試:
??????????????? -e? ???FILE?????? ?判斷是否為單目操作
??????????????? -f??? ?FILE?????? ?判斷是否為普通文件
???? ???????????-d??? ?FILE????? ??判斷是否為目錄
??????????????? -h/-l? ?FILE????? ??判斷是否為符號(hào)鏈接文件
??????????????? -b??? ?FILE????? ??判斷是否為塊設(shè)備文件
??????????????? -c??? ?FILE?????? ?判斷是否為字符設(shè)備文件
??????????????? -r????? FILE?????? 判斷當(dāng)前所用的文件是否有讀權(quán)限
??????????????? -w???? FILE??????? 判斷文件是否有寫權(quán)限
??????????????? -x???? FILE??????? 判斷文件是否有執(zhí)行權(quán)限
二、sed編輯器介紹
? 1.sed:(stream editor) ,是一個(gè)很好用的行編輯器,支持正則表達(dá)式的處理,具有如下特點(diǎn):
?(1)sed是一個(gè)非交互式的編輯器
?(2)沒(méi)有破壞性,不修改源文件,除非使用shell的重定向符來(lái)保存結(jié)果
?(3)sed還支持sed腳本
?使用格式:
?(1)1,4?:表示查找范圍是1-4行,使用格式:sed‘a(chǎn)ddr1,addr2s@from@tog/i’
?其中addr1是開始行,addr2是結(jié)束行,;s 是替換,@為分隔符,也可以是其他
?字符,但是不能與查找的字符一樣,from是查找什么,to 是替換成什么,g是全
?局查找,i 是忽略大小寫查找
(2)/pattern/command? ??sed 也支持模式匹配,
(3)/pattern1/ ,/pattern2/
? ? i\? 在當(dāng)前行的上方添加一行或者多行
??? ?a\ ?在當(dāng)前行的下方添加一行或者多行
? ? ?!?對(duì)模式匹配到的內(nèi)容取反
?????d ?刪除匹配到的內(nèi)容 ,如:sed '5d' filename ?,將文件中的第5行刪除;sed '5,7d' filename ?將文件中的第5-7行刪除
? ? ?
2.sed 的一些常用選項(xiàng)
??????-n ?靜默模式,只顯示被模式匹配到的內(nèi)容
??????-e ?一次指定多個(gè)條件 ,例如:sed ?-e ‘’ ?‘’ ?‘’ ?文件名
? ? ? -i ??可以直接修改原文件
? ? ? -f?? 讀取sed 腳本
3.sed用法的簡(jiǎn)單例子:
echo "var/log/httpd/access_log/" | sed 's@.*/\([^/]\{1,\}\)/\{0,1\}@\1@g'
顯示結(jié)果:access_log
echo "/etc/log/httpd/access_log" | sed '1,$s@\(.*\)/[^/]\{1,\}@\1@g'
顯示結(jié)果:/etc/log/httpd
三、Shell 腳本編程范例:
1.寫一個(gè)腳本:
(1)創(chuàng)建目錄/tmp/scripts
(2)切換工作目錄至此目錄中
(3)復(fù)制/etc/pam.d目錄至當(dāng)前目錄,并重命名為test
(4)將當(dāng)前目錄中的test及其里面的文件和子目錄的屬主改為redhat
(5)將test及其子目錄中的文件的其他用戶的權(quán)限改為沒(méi)有任何權(quán)限
#!/bin/bash
WDIR='/tmp/scripts'
mkdir $WDIR &> /dev/null
cd $WDIR
cp -r /etc/pam.d test &> /dev/null
chown -R redhat test &> /dev/null
chmod -R o= test &> /dev/null
2.寫一個(gè)腳本:
(1).切換工作目錄至/var?????????????
(2).依次向/var目錄中的每個(gè)文件或者子目錄問(wèn)好
第1種方法
#!/bin/bash
echo "lian xi "
cd /var
echo "qie huan mulu chenggong "
for file in `ls /var`; do
??? echo "hello,$file" | cut -d/ -f1,3
done
第2種方法
#!/bin/bash
echo "lian xi "
cd /var
echo "qie huan mulu chenggong "
for file in /var/*; do
??? echo "hello,`basename $file`"
done
3.求100以內(nèi)的整數(shù)的和:
#!/bin/bash
?? declare -i SUM=0
?? for I in {1..100}; do
?? SUM=$[$SUM+$I]
done
? echo "the sum is:$SUM"
4.求100以內(nèi)偶數(shù)的和;
#!/bin/bash
?? declare -i SUM=0
?? for I in `seq 0 2 100`; do
?? SUM=$[$SUM+$I]
done
? echo "the sum is:$SUM"
5.寫一個(gè)腳本:
(1)設(shè)定變量FILE的值為/etc/passwd
(2)使用循環(huán)讀取文件/etc/passwd 的第2,4,6,10,13,15行,并顯示其內(nèi)容:
(3)把這些行保存至/tmp/mypasswd文件中
#!/bin/bash
FILE='/etc/passwd'
for LINE in 2 4 6 10 13 15; do
? head -$LINE $FILE | tail -1 | tee -a /tmp/mypasswd
done
6.寫一個(gè)腳本:
(1)設(shè)定變量FILE的值為/etc/passwd
(2)依次向/etc/passwd中的每個(gè)用戶問(wèn)好,形如:Hello,root,顯示自己的shell ,
形如:your shell : bash
(3)統(tǒng)計(jì)一共有多少個(gè)用戶
第一種方法:
#!/bin/bash
FILE='/etc/passwd'
LINES=`wc -l $FILE | cut -d' ' -f1`
?for LINE in `seq 1 $LINES`; do
? echo "Hello ,`head -$LINE $FILE | tail -1 | cut -d: -f1`, your shell:`head -$LINE $FILE | tail -1 | cut -d: -f7`"
done
也可以這樣:
for LINE in `seq 1 $LINES`; do
??? ?MYUSER=`head -$LINE $FILE | tail -1 | cut -d: -f1`
???? MYSHELL=`head -$LINE $FILE |tail -1 | cut -d: -f7`
?? echo "Hello ,$MYUSER,your shell: $MYSHELL"
7.創(chuàng)建10個(gè)用戶并為其添加密碼,以用戶一樣的密碼
for NEWUSER in {1..10};do
??? useradd user$Newuser &> /dev/null
??? echo "user$Newuser" | passwd --stdin user$NEwuser &> /dev/null
done
轉(zhuǎn)載于:https://blog.51cto.com/linuxg/785391
總結(jié)
以上是生活随笔為你收集整理的bash和sed简要介绍和相关范例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。