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