第一題:
編寫腳本,求100以內所有正奇數之和
答案1:
#!/bin/bash
sum=0
for n in `echo {1..100..2}`;do
sum=$[$sum+$n]
done
echo $sum
答案2:
#!/bin/bash
#編寫腳本,求100以內所有正奇數之和
#author : sunxuefeng
#date : 20180213
echo `seq 1 2 100` |tr " " "+" |bc
答案3:
j=0
for i in `seq 1 100 | sed -n '1~2p'`;do
j=$[i+j]
done
echo $j
答案4:
j=0
for i in {1..100};do
if [ $[$i%2] -ne 0 ];then
let j+=i
fi
done
echo $j
第二題:
編寫一個腳本能打印9*9乘法表如下:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
……
答案1:
#!/bin/bash
for i in {1..9};do
for j in `seq 1 $i`;do
echo -n -e "$i"X"$j=$[i*j]\t"
done
echo
done
答案2:
for ((i=1;i<=9;i++))
do
for ((j=1;j<=i;j++))
do
echo -n "$i*$j=$[$i*$j] "
done
echo
done
答案3:
for i in {1..9}
do
for j in {1..9}
do
if [ ${j} -lt ${i} ]
then
k=$((i * j))
echo -n ${i}*${j}=${k}$'\t'
elif [ ${j} -eq ${i} ]
then
k=$((i * j))
echo ${i}*${j}=${k}
else
break
fi
done
done
第三題:
隨機生成一個10以內的數字,然後寫一個猜數字的遊戲,若輸入的值比隨機的值大,則提示大,再輸入,若小,則提示小,若相等則提示win。
suiji=`echo $[$RANDOM%10]`
while true ;do
read -p "請輸入一個10以內的數 : " n
if [ $n -gt 10 ] ;then
echo "你輸入數大於10"
break
elif [ $n -gt $suiji ] ;then
echo "輸入值大於隨機數"
elif [ $n -lt $suiji ] ;then
echo "輸入值小於隨機數"
elif [ $n -eq $suiji ] ;then
echo "win"
break
fi
done
第四題:
在centos7中編寫腳本,自動對/root/httpd-2.4.29.tar.bz2下的文件進行解壓、編輯、安裝、自動啓動服務,自動關閉防火牆。即只要執行腳本後,便可通過瀏覽器訪問本機的ip,看到網頁內容爲 “春節快樂”。
答案:
tar -xvf /root/httpd-2.4.29.tar.bz2
cd /root/httpd-2.4.29/
./configure --prefix=/app/http29 --sysconfdir=/etc/httpd29
make
make install
/app/http29/bin/apachectl start
echo '<html><body><h1>新年快樂</h1></body></html>' > /app/http29/htdocs/index.html
第五題:
編寫一個創建用戶的腳本,要求以下功能
a.提示用戶輸入希望創建的用戶名(當用戶超時8秒不輸入,提示超時並退出)
b.檢測用戶名是否已存在,若用戶不存在,則進入第c步驟,若用戶存在則提示用戶是否要對該用戶設置密碼,若用戶輸入yes、YES、y、Y時則跳至d步驟,如輸入其他,或超時8秒均退出。
c.用戶創建完成後提示用戶是否要繼續設置密碼,若用戶輸入yes、YES、y、Y時則繼續下一步,如輸入其他,或超時8秒均退出。
d.接上一步,爲用戶設置密碼,首先提示用戶輸入要設置的密碼,密碼的輸入過程不可見。
e.對用戶上一步所輸入的密碼進行長度檢測,若少於5位(包含5位),則提示用戶密碼太短,請重新輸入。
f.對用戶在第d步所輸入的密碼進行複雜度檢測,若所輸入的內容與/usr/share/dict/words 字典中的某一行條目完全一致,則提示密碼是一個常見單詞,請重新輸入。若第e/f兩步的密碼錯誤次數一共超過3次,則提示錯誤次數過多,並退出。
g.再一次讓用戶輸入密碼,若第二次輸入的密碼與在第d步輸入的不一致,則提示用戶兩次密碼不一致,請重新輸入,則跳回至第d步。
h.d至g步驟全部通過後,爲用戶設置密碼後,並提示密碼已成功設置。最後正確退出。
以上的所有退出情況應給出不同的返回值。
答案:
#!/bin/bash
#
changepasswd() {
#密碼修改
wrongtime=3
while [ $wrongtime -ne 0 ] ;do
for (( i=4;i>=1;i-- )) ; do
if [ $i -eq 1 ];then
echo "錯誤次數超過3次";exit 5
fi
#設置密碼
read -p "請輸入密碼 : " -s passwd1
#密碼長度檢測
if [ $(echo $passwd1|wc -m ) -le 6 ] &> /dev/null ;then
echo "設置密碼太短"
continue
fi
#密碼複雜度檢測
egrep "\b$passwd1\b" /usr/share/dict/words >& /dev/null
if [ $? -eq 0 ] ; then
echo "密碼設置爲常見單詞,請重設置密碼"
continue
else
echo
break
fi
done
#確認輸入密碼
read -p "請確認輸入密碼 : " -s passwd2
if [ `echo $passwd1` == `echo $passwd2` ];then
echo
echo $passwd1 |passwd --stdin $name &> /dev/null
echo "密碼設置成功"
break
else
echo
echo "密碼不一致,請重新輸入"
wrongtime=$[$wrongtime-1]
continue
fi
done
}
read -t 8 -p "輸入希望創建的用戶名 :" name
if [ $? -ne 0 ] ;then
echo
echo "用戶名輸入超時" ;exit 1
fi
#檢測用戶名是否存在
id $name >& /dev/null
if [ $? -eq 0 ] ; then
read -t 8 -p "用戶存在,是否繼續設置密碼,從yes.YES.y.Y中選擇 :" go
else
useradd $name
read -t 8 -p "用戶創建成功,是否繼續設置密碼,從yes.YES.y.Y中選擇 :" go
fi
#選擇設置密碼&&輸入密碼
if [ $? -ne 0 ] ;then
echo
echo "輸入超時" ;exit 2
fi
case $go in
yes|YES|y|Y)changepasswd;;
*)exit 6
esac
exit 0
第六題:
編寫一個錄入個人信息的腳本/root/bin/information.sh,要求如下:
1.提示用戶輸入username(需對名字進行字符要求檢查,用戶名中不能模糊包含系統中任何一個已在存在用戶名,如不能爲helloroot1,123bin,ggntp2等。且要求username要以大寫字母開頭,長度至少5個字符。
2.提示用戶輸入性別,僅能輸入male或female,輸入其他的提示用戶重試。
3.提示用戶輸入生日,格式必須爲yyyy-mm-dd,並對日期的合法性進行檢查,若輸入2018-02-30等與現實不符的日期,則提示日期錯誤,請重試。
4.提示用戶輸入手機號,長度僅能11位,且務必以13x,18x,15x,17x開頭,若錯誤則提示用戶重新輸入。
5.提示用戶輸入×××號,長度可爲18位,格式前17位均爲數字。要求第7位至第14位所填的內容與第3步的生日符合。同時要求第17位所填的數字若爲奇數,那麼第2位所填寫的性別應爲male,反之偶數應爲female。最後1位可爲數字或x。
6.將以上輸入的信息以:爲分隔符,保存至/root/info.txt中,每次輸入一個用戶,會向下追加一行。
如Zhangsan:male:1999-12-20:13588291219:4101011999122030051
答案:
#!/bin/bash
flag=1
while true;do
read -p "請輸入用戶名 " username
if $(echo "$username" |egrep '^[[:upper:]].{4,}' &> /dev/null) ;then
true
else
echo "請輸入首字母大寫的高於5位的字符"
continue
fi
for n in `cat /etc/passwd |cut -d: -f1`;do
echo $username| grep $n &> /dev/null
if [ $? -eq 0 ];then
flag=0
break
fi
done
if [ $flag -eq 0 ];then
echo 包含敏感字符
exit 1
else
break
fi
done
#------------------------------------------------------------------------------------------------------------
while true;do
read -p "請輸入性別(male,female) " sex
case $sex in
male|female)break;;
*)echo 輸錯了;continue ;;
esac
done
#---------------------------------------------------------------------
while true;do
read -p "輸入生日 " bir
echo $bir|egrep '[[:digit:]]{4}(-[[:digit:]]{1,2}){2}' &> /dev/null
if [ $? -eq 0 ] ;then
biry=$(echo $bir|cut -d- -f1)
birm=$(echo $bir|cut -d- -f2)
bird=$(echo $bir|cut -d- -f3)
if $(cal $bird $birm $biry &> /dev/null) ;then
break
else
echo "不合法"
continue
fi
else
echo 格式不合法
continue
fi
done
#------------------------------------------------------------------------------
while true ;do
read -p "請輸入手機號 " num
echo $num |egrep '\<1[3857][[:digit:]]{9}\>' &> /dev/null
if [ $? -eq 0 ];then
break
else
echo "格式不對"
continue
fi
done
#---------------------------------------------------------------------------------
while true ;do
read -p "請輸入×××號 " id
echo $id |egrep '[[:digit:]]{17}[[:digit:]x]' &> /dev/null
if [ $? -eq 0 ];then
biry1=`echo $id |cut -c 7-10`
birm1=`echo $id |cut -c 11-12`
bird1=`echo $id |cut -c 13-14`
if [ $(echo -n $birm|wc -m) -eq 1 ];then
birm=0$birm
fi
if [ $(echo -n $bird|wc -m) -eq 1 ];then
birm=0$bird
fi
if [ "$biry$birm$bird" == $biry1$birm1$bird1 ];then
shu=$[$(echo $id|cut -c 17)%2]
case $shu in
1)xingbie=male
if [ "$xingbie" != "$sex" ];then
echo "性別錯了"
continue
else
break
fi;;
*)xingbie=female
if [ "$xingbie" != "$sex" ];then
echo "性別錯了"
continue
else
break
fi;;
esac
else
echo "日期不符"
continue
fi
else
echo 格式不對
continue
fi
done
#----------------------------
echo "$username:$sex:$bir:$num:$id">>/app/info.txt
第七題:
利用第六題的腳本,輸入20個用戶信息。
編寫一個抽獎系統的腳本 ,可對/root/info.txt文件中的手機號進行隨機抽獎,將中獎的手機號打印出來,要求第4-7位顯示爲*,即135****1219
答案:
numlist=$(cat -n /app/jobs_20180213_jiaqi/info.txt |wc -l)
randnum=$(echo $[$RANDOM%$numlist+1]) #標記行號是從1開始的,所以隨機求餘數範圍最小是1,最大是numlist -> numli
st-1
sed -n "${randnum}p" /app/jobs_20180213_jiaqi/info.txt |cut -d: -f4 |sed -r "s/\<([[:digit:]]{3}).*([[:digit:
]]{4})\>/\1****\2/"