給定一個(gè)用戶,判斷其UID和GID是否一樣 "^$USERNAME\>"(行首第一個(gè)單詞)
“專業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個(gè)人一直以來堅(jiān)持追求的企業(yè)文化。 成都創(chuàng)新互聯(lián)公司是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、軟件開發(fā)、設(shè)計(jì)服務(wù)業(yè)務(wù)。我們始終堅(jiān)持以客戶需求為導(dǎo)向,結(jié)合用戶體驗(yàn)與視覺傳達(dá),提供有針對(duì)性的項(xiàng)目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場(chǎng),引領(lǐng)市場(chǎng)!
如果一樣,就顯示此用戶為"good guy";否則,就顯示此用戶為"bad guy"
#!/bin/bash
#
USERNAME =user1
if !grep "^$USERNAME\>" /etc/passwd &> /dev/null;then 用戶不存在
echo "No such user: $USERNAME."
exit 1
fi
USERID = `id -u $USERNAME`
GROUPID =`id -g $USERNAME`
if[ $USERID -eq $GROUPID ];then
echo "good guy"
else
echo "bad guy"
fi
exit: 退出腳本
exit #(#代表數(shù)字)
bash中常用的條件測(cè)試三種
-gt
-le
-ne
-ge
-lt
-eq 非0值都是假
--------------------只有上面才能用[],其他表達(dá)式中不能出現(xiàn)[]
INT1 = 63
INT2 = 77
[ $INT1 -eq $INT2 ]
[[ $INT1 -eq $INT2 ]]
TEST $INT1 -eq $INT2
if [ `grep "^$USENAME\>" /etc/passwd | cut -d: -f3` -eq 0 ];then 對(duì)
if [ `grep "^$USENAME\>" /etc/passwd ` -eq 0 ];then 錯(cuò)(前面是一行)
測(cè)試方法
[ expression ] bash的命令
` expression ` bash關(guān)鍵字
test expression
文件測(cè)試:
-e FILE:測(cè)試一個(gè)文件是否存在
-f FILE:測(cè)試文件是否為普通文件
-d FILE: 測(cè)試指定路徑是否為目錄的
-r FILE: 測(cè)試當(dāng)前用戶對(duì)指定文件是否有讀取權(quán)限
-w
-x FILE
[ -e /etc/initttab ]
[ -x /etc/rc.d/rc.sysinit ]
練習(xí):寫一個(gè)腳本
給定一個(gè)文件,比如/etc/inittab
判斷這個(gè)文件中是否有空白行
如果有,則顯示其空白行數(shù),否則,顯示沒有空白行
#!/bin/bash
FILE = /etc/inittab
if [! -e $FILE ];then
echo "No $FILE."
exit 8
fi
if grep "^$" $FILE &> /dev/null;then
echo "Total blank lines: `grep "^$" $FILE | wc -l`."
else
echo "No blank line."
fi
圓整,丟棄小數(shù)點(diǎn)后的內(nèi)容
expr命令一般用于整數(shù)值
#expr argument operator argument
練習(xí):編寫一個(gè)腳本
給定一個(gè)用戶,獲取其密碼警告期限:
而后判斷用戶最近一次修改密碼時(shí)間距今天是否已經(jīng)小于警告期限
提示:算術(shù)運(yùn)算的方法$[$A-$B]:表示變量A的值減去變量B的值的結(jié)果
如果小于,則顯示"Warning":否則,就顯示"OK"
#!/bin/bash
#
W=`grep "student" /etc/shadow | cut -d: -f6`
S=`date +%s`
T=`expr $S/86400`
L=`grep "^student" /etc/shadow | cut -d: -f5`
N=`grep "^student" /etc/shadow | cut -d: -f3`
SY=$[$L-$[$T-$N]]
if [ $SY -lt $W ];then
echo 'Worning'
else
echo 'OK'
fi
練習(xí):寫一個(gè)腳本
判讀命令歷史中歷史命令的總條目是否大于1000;如果大于,則顯示
"Some command will gone.";否則顯示"ok"
history 當(dāng)前顯示緩沖區(qū)中的條數(shù)(會(huì)大于1000)
$HISTSIZE 都只顯示1000
$HISTFILESIZE 都只顯示1000
history | tail -l | cut -d' ' -f1 由于前面有一個(gè)空格,取不出條數(shù),當(dāng)取第二個(gè)字段
history | tail -l | cut -d' ' -f2
#!/bin/bash
#
COUNT = history | tail -l | cut -d' ' -f2
if $COUNT -gt 1000 ;then
echo "Some command will gone."
else
echo "ok"
fi
多分支的if語句
if 判斷條件1;then
statement1
...
elif 判斷條件2;then
statement2
...
elif 判斷條件3;then
statement3
...
else 判斷條件4;then
statement4
...
fi
#!/bin/bash
#
FILE =/etc/inittab
if [ -e $FILE ];then
echo "OK"
else
echo "No such file"
fi
測(cè)試腳本是否有語法錯(cuò)誤
bash -n filetest.sh
bash -x 腳本:?jiǎn)尾綀?zhí)行
給定一個(gè)文件,如果是一個(gè)普通文件,就顯示之
如果是一個(gè)目錄,亦顯示之
否則,此為無法識(shí)別之文件
filetest2.sh
#!/bin/bash
#
FILE =/etc/rc.d/rc.sysinit
if [ ! -e $FILE ];then
echo "NO such file"
exit 6
fi
if [ -f $FILE ];then
echo "Common file"
elif [ -d $FILE ];then
echo "Directory"
else
echo "Unkown."
fi
定義腳本退出狀態(tài)碼
如果腳本沒有明確定義退出狀態(tài)碼,那么,最后執(zhí)行的一條命令
的退出碼即為腳本的退出狀態(tài)碼
bash變量的類型:
本地變量(局部變量) 當(dāng)前shell進(jìn)程
環(huán)境變量 當(dāng)前shell進(jìn)程及其子進(jìn)程
位置變量:$1 $2 ...
shift(踢掉一個(gè)位置值)默認(rèn)踢1個(gè)
shift [n]踢掉n個(gè)
特殊變量 $?
$#:參數(shù)的個(gè)數(shù)
$*:參數(shù)列表
$@:參數(shù)列表
./filetest.sh /etc/fstab /etc/inittab
$1:/etc/fstab
$2:/etc/inittab
練習(xí):寫一個(gè)腳本
能接受一個(gè)參數(shù)(文件路徑)
判定:此參數(shù)如果是一個(gè)存在的文件,就顯示OK ,否則顯示No such file
#!/bin/bash
#
echo $#
echo $*
echo $@
if[ $# -lt 1 ];then
echo "Usage: ./filetest3.sh ARG1 [ARG2 ...]"
if [ -e $1 ];then
echo "ok"
else
echo "No such file"
fi
練習(xí):寫一個(gè)腳本
給腳本傳遞兩個(gè)參數(shù)(整數(shù))
顯示此兩個(gè)參數(shù)之和,之乘積
#!/bin/bash
#
if [ $# -lt 2 ];then
echo "Usage: cac1.sh ARG1 ARG2"
exit
fi
echo "The sum is : $[$1 + $2]."
echo "The prod is : $[$1 * $2]."
sed -n 靜默
-i 直接修改原文件
-e SCRIPT -e SCRIPT:可以同時(shí)執(zhí)行多個(gè)腳本
-f /PATH/TO/SED_SCRIPT
sed -f /path/to/scripts file
這個(gè)文件是腳本一行一個(gè)腳本運(yùn)用在file上
-r :表示使用擴(kuò)展正則表達(dá)式
刪除行首的空格
history | sed 's#^[[:space:]]*##g'
history | sed 's#^[[:space:]]+##g'
g:全局替換
i:忽略字符大小寫
s///:s###,s@@@
sed 's#l..e#&r#g' sed.txt
sed 's#\(l..e\)#\1r#g' sed.txt 后項(xiàng)引用
like - Like
love - Love
sed 's#l\(..e\)#L\1#g' sed.txt
&:引用模式匹配到的整個(gè)串
sed練習(xí):
1 刪除/etc/grub.conf文件中行首的空白符
sed -r 's@^[[:space:]]+@@g' /etc/grub.conf
2 替換/etc/inittab文件中"id:3:initdefault:"一行
中的數(shù)字為5
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
3 刪除/etc/inittab文件中的空白行
sed '/^$/d' /etc/inittab
4 刪除/etc/inittab文件中開頭的#號(hào)
sed 's@^#@@g' /etc/inittab
5 刪除/etc/inittab文件中開頭的#號(hào)及后面的空白字符,但要求
#號(hào)后面必須有空白字符
sed -r 's@^#[[:space:]]+@@g' /etc/inittab
6 刪除某文件中以空白字符后面跟#類的行中的開頭的
空白字符及#
sed -r 's@^[[:space:]]+@@g' /inittab
7 取出一個(gè)文件路徑的目錄名稱
echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g' 取etc
基名:
echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g' 取rc.d
#abc
# hello world
# hi world
練習(xí):
傳遞一個(gè)用戶名參數(shù)給腳本,判斷此用戶名跟其基本組的
組名是否一致,并將結(jié)果顯示出來
[ ]條件是
vi testUser.sh
#!/bin/bash
#
if !id $1 &>/dev/null;then
echo "No such user."
exit 8
fi
#if [ `id -n -u $1` == `id -n -g $1`];then
if [ $1 == `id -n -g $1`];then 用戶名本來就是一個(gè)字符串
echo "yiyang"
else
echo "buyiyang"
fi
字符測(cè)試:
== [ $A = $B ]
!= [ $A != $B ]
>
<
-n string:測(cè)試指定字符串是否為空,空真
-z string:測(cè)試指定字符串是否不空,不空真
練習(xí):寫一個(gè)腳本
傳遞一個(gè)參數(shù)(單字符就行)給腳本,如果參數(shù)為q,就退出腳本;
否則,就顯示用戶的參數(shù)
練習(xí):寫一個(gè)腳本
傳遞一個(gè)參數(shù)(單字符就行)給腳本,如果參數(shù)為q、Q、Quit,就退出腳本;
否則,就顯示用戶的參數(shù)
#!/bin/bash
#
if [ $1 = 'q' ];then
echo "Quiting..."
exit 1
elif [ $1 = 'Q' ];then
echo "Quiting..."
exit 2
elif [ $1 = 'quit' ];then
echo "Quiting..."
exit 3
elif [ $1 = 'Quit' ];then
echo "Quiting..."
exit 4
else
echo $1
fi
練習(xí):
傳遞三個(gè)參數(shù)給腳本,第一個(gè)為整數(shù);第二個(gè)為算術(shù)運(yùn)算符,
第三個(gè)為整數(shù),將計(jì)算結(jié)果顯示出來,要求保留兩位精度,
形如:
./calc.sh 5 /2
echo "scale=2;111/22;" | bc 答案5.02
bc <<< "scale=2;111/22;"
練習(xí):
傳遞3個(gè)參數(shù)給腳本,參數(shù)均為用戶名,將此些用戶的賬號(hào)信息取
出來后放置于/tmp/testusers.txt文件中,并要求每一行行首
有行號(hào)
添加行號(hào)
echo "1 $LINE" >> /tmp/testusers
echo "2 $LINE" >> /tmp/testusers
練習(xí):
判斷當(dāng)前主機(jī)的CPU生產(chǎn)商,其信息在/proc/cpuinfo文件中vendor id
一行中,如果其生產(chǎn)商為AuthenticAMD,就顯示其為AMD公司;如果生
產(chǎn)商為GenuineIntel,就顯示其為Intel公司:否則,就說其為非主流
公司:
寫一個(gè)腳本:
給腳本傳遞三個(gè)參數(shù),判斷其中的最大數(shù)和最小數(shù),并顯示出來
MAX=0
-eq -lt
寫一個(gè)腳本:
1 設(shè)定變量FILE的值為/etc/passwd
2 依次向/etc/passwd中的每個(gè)用戶問好,并顯示對(duì)方的shell,形如:
Hello,root,your shell:/bin/bash
3 統(tǒng)計(jì)一共有多少用戶
LINES = `wc -l /etc/passwd | cut -d' ' -f1`
for I in `seq 1 $LINES`;do
echo "hello, `head -n $I /etc/passwd | tail -1 | cut -d: -f1`"
只向默認(rèn)shell為bash的用戶問聲好
寫一個(gè)腳本:
1 添加10個(gè)用戶user1到user10,但要求只有用戶不存在的情況下才能
添加,密碼同用戶名
擴(kuò)展:
接收一個(gè)參數(shù)
add:添加用戶user1..user10
del:刪除用戶user1..user10
其他,退出
adminusers --add user1,user2,user3,hello,hi
vim adminuser2.sh
#/bin/bash
#
#echo $1
#echo $1 | tr -d','刪除所有的逗號(hào)
#echo $1 |sed 's/,/ /g'
for I in `echo $1 |sed 's/,/ /g'`;do
if id $I &> /dev/null;then
echo "$I exist."
else
useradd $I
echo $I | passwd --stdin $I &> /dev/null
echo "add $I finished."
fi
done
vim adminuser3.sh
#/bin/bash
#
if [ $1 == '--add' ];then
for I in `echo $2 |sed 's/,/ /g'`;do
if id $I &> /dev/null;then
echo "$I exist."
else
useradd $I
echo $I | passwd --stdin $I &> /dev/null
echo "add $I finished."
fi
done
elif [ $1 == '--del' ];then
for I in `echo $2 |sed 's/,/ /g'`;do
if id $I &>/dev/null;then
userdel -r $I
echo "Delete $I finished."
else
echo "$I not exist."
fi
done
elif [ $1 == '--help' ]
echo "Usage:adminuser2.sh --add USER1,USER2,... | --del USER1,USER2,... --help"
else
echo "Unkown ARG"
exit 8
fi
在剩下的三個(gè)月里,你愿意與學(xué)習(xí)結(jié)為伴侶,無論貧窮還是富貴,
無論電腦還是手機(jī),無論多困或者多累,無論想吃還是想睡,
都要把學(xué)習(xí)放在第一位,以不落后為目標(biāo),同甘共苦同舟共濟(jì)
永不言棄,愛惜她,尊重她,理解她,保護(hù)她,你愿意這樣做嗎
vim adduser.sh
#!/bin/bash
#
for I in {1..10};do
if id user$I &>/dev/null;then
echo "user$I exist."
else
useradd user$I
echo user$I | passwd --stdin user$I &>/dev/null
echo "ADD user user$I finished"
fi
done
vim deluser.sh
#!/bin/bash
#
for I in {1..10};do
if id user$I &>/dev/null;then
userdel -r user$I
echo "Delete user$I finished."
else
echo "user$I not exist."
fi
done
vi adminnusers.sh
#/bin/bash
#
if [ $# -lt 1 ];then
echo "Usage:adminnusers ARG"
exit 7
fi
if [ $1 == '--add' ];then
for I in {1..10};do
if id user$I &> /dev/null
echo "user$I exist."
else
useradd user$I
echo user$I | passwd --stdin user$I &>/dev/null
echo "ADD user user$I finished"
fi
done
elif [ $1 == '--del' ];then
for I in {1..10};do
if id user$I &>/dev/null;then
userdel -r user$I
echo "Delete user$I finished."
else
echo "user$I not exist."
fi
done
else
echo "Unkown ARG"
exit 8
fi
循環(huán):進(jìn)入條件,退出條件
for
while
until
for 變量 in 列表;do
循環(huán)體
done
for i in 1 2 3 4 5;do
加法運(yùn)算
done
遍歷完成之后,退出:
如何生成列表:
{1..100}
seq [起始數(shù) [步進(jìn)長(zhǎng)度]] 結(jié)束數(shù)
`ls /etc`也能訪問每一個(gè)文件的列表
默認(rèn)變量是字符串
declare -i SUM=0
integer
-x (環(huán)境變量)
1,...100
#/bin/bash
#
#let SUM = 0 此時(shí)變量是數(shù)字let
declare -i SUM=0
for I in {1..100};do
let SUM =$[$SUM+$I]
done
echo "The sum is $SUM."
寫一個(gè)腳本
計(jì)算100以內(nèi)所有能被3整除的整數(shù)的和
取模,取余%
寫一個(gè)腳本:
計(jì)算100以內(nèi)所有奇數(shù)和以及所有偶數(shù)的和:分別顯示之:
寫一個(gè)腳本,分別顯示當(dāng)前系統(tǒng)上所有默認(rèn)shell為bash的用戶和默認(rèn)
shell為/bin/nologin的用戶,并統(tǒng)計(jì)各類shell下的用戶總數(shù),顯示
結(jié)果形如:
BASH,3users,they are:
root,redhat,gentoo
NOLOGIN,2users,they are:
bin,ftp
新聞標(biāo)題:6.3bash編程字符測(cè)試
文章地址:http://www.rwnh.cn/article44/pcoshe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、響應(yīng)式網(wǎng)站、App設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)