shell編程進階

2、編寫腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,并判斷用戶輸入的是yes還是no,或是其它信息
read -p “Enter you choice yes|no:” Choice
Choice1=`echo $Choice | tr ‘[a-z]’ ‘[A-Z]’`
case $Choice1 in
Y|YES)
echo “you select yes.”
;;
N|NO)
echo “you select no.”
;;
*)
echo “you select others.”
;;
esac

3、編寫腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)
read -p “Please input the filepath: ” f
if [ ! -e $f ];then
echo “the file is not exited,please input the right filepath” && exit
elif [ -f $f ];then
echo “the file is regular file”
elif [ -d $f ];then
echo “the file is directory file”
elif [ -l $f ];then
echo “the file is link file”
else
echo “the file is other type”
fi
4、編寫腳本/root/bin/checkint.sh,判斷用戶輸入的參數是否為正整數
read -p “please input : ” number
if [[ “$number” =~ ^[0-9]+$ ]];then
echo zhengshu
else
echo “not zhengshu”
fi
~
for
1、判斷/var/目錄下所有文件的類型
for type in /var/* ;do
if [ -h $type -o -L $type ];then
echo “the $type is a link file”
elif [ -f $type ];then
echo “the $type is a reguler file”
elif [ -d $type ];then
echo “the $type is a dir file”
elif [ -b $type ];then
echo “the $type is a block file”
elif [ -c $type ];then
echo “the $type is a character file”
elif [ -p $type ];then
echo “the $type is a pipe file”
else
echo “the $type is other file”
fi
done
wait
2、添加10個用戶user1-user10,密碼為8位隨機字符
for uid in `seq 1 6`;do
grep “^user$uid\>” /etc/passwd &>/dev/null
if [ $? -eq 0 ];then
echo the user$uid is exited
else
useradd user”$uid”
passwd=`tr -dc ‘a-zA-Z0-9’ > /app/user.log
echo “$passwd” | passwd –stdin user”$uid” &> /dev/null && echo user”$uid” is created Suc
cessfully!!!
fi
done
3、/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每個文件,以K開頭的輸出為文件加stop,以S開頭的輸出為文件名加start,如K34filename stop S66filename start
k=`ls /etc/rc.d/rc3.d | egrep -i “^k.*”`
s=`ls /etc/rc.d/rc3.d | egrep -i “^s.*”`
for fk in $k;do
echo -e “$fk\tstop”
done
for fs in $s;do
echo -e “$fs\tstart”
done
4、編寫腳本,提示輸入正整數n的值,計算1+2+…+n的總和
read -p “please input number: ” n
if [[ “$n” =~ ^[0-9]+$ ]];then
sum=0
for n in `seq $n`;do
let sum=sum+$n
done
echo “the sumnumber is $sum”
else
echo “please input right number!”
fi
5、計算100以內所有能被3整除的整數之和
sum=0
m=3
for n in `seq 100`;do
let a=n%m
if [ $a -eq 0 ];then
let sum=sum+n
fi
done
echo $sum
6、編寫腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段中主機在線狀態
#!/bin/bash
read -p “Please input IP: ” ip
if [[ “$ip” =~ ([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3} ]];then
a=`echo $ip | cut -d. -f1-3`
for b in {0..254};do
{
if ping -c1 -W1 $a.$b &> /dev/null;then
echo $a.$b is up!
fi
}&
done
else
echo please input the right IP!
fi
wait
7、打印九九乘法表
for a in `seq 9`;do
for b in `seq $a`;do
echo -ne “$b*$a=$[$b*$a]\t”
done
echo
done
8、在/testdir目錄下創建10個html文件,文件名格式為數字N(從1到10)加隨機8個字母,如:1AbCdeFgH.html
#!/bin/bash
if [ ! -d /testdir ];then
mkdir /testdir/ &> /dev/null
fi
for n in {1..10};do
for a in `cat /dev/urandom |tr -dc “a-zA-Z”|head -c 8`;do
touch /testdir/$n$a.html
done
echo $n$a.html is already created!
done
9、打印等腰三角形
#!/bin/bash
read -p “請輸出層數:” L
if [[ “$L” =~ ^[0-9]+$ ]];then
for k in `seq $L`;do
for a in `seq $[$L-$k]`;do
echo -n ” “
done
for b in `seq $[$k*2-1]`;do
echo -en “\033[3$Yan;5m?\033[0m”
done
echo
done
else
echo Please input the number!
fi

用while實現
1、編寫腳本,求100以內所有正奇數之和
第一種:for
11
#!/bin/bash
declare -i num=0
for i in `seq 1 2 100`
do
num+=i
# num=$[$num+$i]
done
echo “sum is $num”
執行結果:
[root@os01 /]# ./1.sh
sum is 2500
第二種:while
#!/bin/bash
#
declare -i i=1
declare -i sum=0
while [ $i -le 100 ]
do
sum+=i
let i+=2
done
echo “sum is $sum”
#執行結果
[root@os01 /]# ./2.sh
sum is 2500
第三種:for contniue
#!/bin/bash
declare -i i=1
declare -i sum=0
for i in `seq 1 100`
do
if [ $[$i%2] -eq 0 ]
then
continue
fi
sum+=i
done
echo “sum is $sum”
#執行結果
[root@os01 /]# ./3.sh
sum is 2500

第四種:until
#!/bin/bash
#
declare -i i=0
declare -i sum=0
until [ $i -eq 100 ]
do
let i++
if [ $[$i%2] -eq 0 ]
then
continue
fi
sum+=i
done
echo “sum is $sum”
[root@os01 /]# ./4.sh
sum is 2500
2、編寫腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段中主機在線狀態,并統計在線和離線主機各多少
#!/bin/bash
read -p “please input the ip(eg:172.18.0.1): ” ip
network=`echo $ip |cut -d “.” -f1-3` #C類地址前三位為網絡id
i=1 #ip一般從1開始
up=0
down=0
while [ $i -le 254 ];do #255作為網段內的廣播ip,所以取1-254之內的循環
if ping -c1 -w1 $network.$i > /dev/null;then #ping一次一秒
echo $network.$i is up!
let up++ #統計開機主機數
else
echo $network.$i is down!
let down++ #統計關機主機數
fi
let i++
done
3、編寫腳本,打印九九乘法表
i=1
while [ $i -le 9 ];do
j=1
while [ $j -le $i ];do
mul=$[$i*$j]
echo -ne “$i*$j=$mul\t”
j=$[$j+1]
done
echo
i=$[$i+1]
done
4、編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數字,并顯示其中的最大值和最小值
random.sh

cat /dev/null > /root/random.txt
declare -i num=1
while [ $num -le 10 ];do
echo $RANDOM | tee -a /root/random.txt
let num++
done
echo “min: “
sort -n /root/random.txt | head -1
echo “max: “
sort -n /root/random.txt | tail -1

============================================

addr.sh

i=10
a=$RANDOM
max=$a
min=$a
while [ $i -ge 1 ]
do
[ $max -lt $a ] && max=$a
[ $min -gt $a ] && min=$a
echo “$a”
a=$RANDOM
let i–
done
echo “最大值$max”
echo “最小值$min”

============================================

declare -i MAX=0
declare -i MIN=0
for I in {1..10};do
MYRAND=$RANDOM
[ $I -eq 1 ] && MIN=$RANDOM
if [ $I -le 9 ];then
echo -n “$MYRAND,”
else
echo “$MYRAND”
fi
[ $MYRAND -gt $MAX ] && MAX=$MYRAND
[ $MYRAND -lt $MIN ] && MIN=$MYRAND
done
echo $MAX,$MIN
5、編寫腳本,實現打印國際象棋棋盤
#!/bin/bash
k=0
while [ $k -lt 4 ];do
l=0
while [ $l -lt 4 ];do
echo -ne “\033[41m \033[0m”
echo -ne “\033[43m \033[0m”
let l++
done
echo
l=0
while [ $l -lt 4 ];do
echo -ne “\033[41m \033[0m”
echo -ne “\033[43m \033[0m”
let l++
done
echo
l=0
while [ $l -lt 4 ];do
echo -ne “\033[43m \033[0m”
echo -ne “\033[41m \033[0m”
let l++
done
echo
l=0
while [ $l -lt 4 ];do
echo -ne “\033[43m \033[0m”
echo -ne “\033[41m \033[0m”
let l++
done
echo
let k++
done

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87234

(2)
1589344251815893442518
上一篇 2017-09-16 11:56
下一篇 2017-09-16 13:13

相關推薦

  • 淺談正則表達式

    1.       什么是正則表達式 基本說來,正則表達式是一種用來描述一定數量文本的模式。Regex代表Regular Express。本文將用<<regex>>來表示一段具體的正則表達式。 一段文本就是最基本的模式,簡單的匹配相同的文本。   2. &n…

    Linux干貨 2016-08-12
  • 文本處理三劍客之一的sed

    處理文本的工具sed Stream EDitor, 行編輯器 sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Se…

    Linux干貨 2017-04-27
  • N25-第六周博客作業

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; [root@han ~]# cp /etc/rc.d/rc.sysinit /tmp [root@han ~]#&n…

    Linux干貨 2017-02-16
  • 編寫服務腳本/root/bin/testsrv.sh和備份腳本/root/bin/copycmd.sh

    編寫服務腳本/root/bin/testsrv.sh,完成如下要求 (1) 腳本可接受參數:start, stop, restart, status (2) 如果參數非此四者之一,提示使用格式后報錯退出 (3) 如是start:則創建/var/lock/subsys/SCRIPT_NAME, 并顯示“啟動成功” 考慮:如果事先已經啟動過一次,該如何處理? (…

    Linux干貨 2016-08-24
  • Centos 5\6的啟動流程簡介

     Centos 5\6的啟動流程簡介圖如下  第三步說明:磁盤的第一個扇區512字節的前446是bootloader,與此446字節與grub Stage1的446字節是一樣的,主要功能是加載/boot/grup/目錄下的文件     stage1.5加載相應用的文件系統文件并識別,如ext系列使用的e2fs…

    Linux干貨 2016-06-03
  • 20161028第9天作業

    20161028第9天作業 1、編寫腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問” 2、編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區空間和inode使用率率,如果超過80%,就發廣播…

    Linux干貨 2016-10-30
欧美性久久久久