腳本練習題

1.使用腳本打印出如下圖形

*
**
***
***
**
*
答案一:
#!/bin/bash
#1.接受一個參數為星星的個數。
num=$1

#2.求出總共要打印的行數
let lines=num*2

#3.for 循環處理每一行的數據
for i in `seq $lines`;do
#4.前半個星星處理邏輯
if [ $i -le $num ];then
for j in `seq $(( $num-$i))`;do
echo -n ” ”
done
for j in `seq $i`;do
echo -n “*”
done
echo “”

#5.后半個星星的處理邏輯
else
for j in `seq $num`;do
echo -n ” ”
done
for j in `seq $(( $lines-$i+1 ))`;do
echo -n “*”
done
echo “”
fi

done

答案二:
read -p “Input a number : ” i
#var=$[i*2-1]
declare -i m=1
declare -i ln=xn=$[i*2]
declare -i sn=$[i-1]
#declare -i n=1

#一共ln行,
for j in `seq $ln` ;do
if [ $j -le $[ln/2] ]; then #判斷上半部分還是下半部分
for n in `seq $[i-1]` ;do #每行的空格數
echo -e ” \c”;
done
for m in `seq $m` ;do #每行的*數
echo -e “*\c”;
done
echo
m+=1
i=$[i-1]
continue
else
for s in `seq $sn` ;do #下半部分每行之前的空格數
echo -e ” \c”;
done
for x in `seq $[xn/2]` ;do #下半部分每行的*數
echo -e “*\c”;
done
echo
xn=$[xn-2]
fi
done

2.遞歸練習,打印出200以內的斐波那契數列。
#!/bin/bash

#1.創建斐波那契函數
function fib(){
#2.初始化接收到的參數
temp=$1

#3.前連個值都為1
if [ $temp -le 2 ];then
echo 1
#4.一定要有返回值,要不就死循環了。
return
fi

#4.如果不是前兩個值,進行計算求值
v1=`fib $(( temp-1 ))`
v2=`fib $(( temp-2 ))`
echo $((v1+v2))
}

#fib $1

#5.輸出對應長度的斐波那契數列
for i in `seq $1`;do
fib $i

done

方法二(數組非遞歸):
#!/bin/bash

#1.傳入一個數列長度
read -p “Please input a number (If number is too large , the result will be wrong ):” i

#2.定義一個數組存放對應數列的值
declare -a sl
sl[0]=0
sl[1]=1
sl[2]=1

#3.前兩數直接輸出
if [ $i -lt 3 ];then
echo ${sl[*]}

#4.其他數值循環遍歷生成,存放于數組中
else
for i in `eval seq 3 $i`; do
let sl[$i]=${sl[$i-1]}+${sl[$i-2]}
done
fi

#5.打印數組
len=${#sl[*]}
for i in `seq 1 $(( len-1 ))`;do
echo -n “${sl[$i]} ”
done
echo “”

3.編寫一個腳本,測試一下172.20 教室 哪些主機可以ping通。并將ip地址按升序打印出來。

#!/bin/bash

#1.循環生成ip地址
for i in `seq 0 255`; do
#2.ping對應地址并將ping程序轉為后臺運行。
for n in `seq 1 30`; do
ping -c 1 -w 1 172.20.$i.$n > /dev/null && echo “Host 172.20.$i.$n is up” >> /tmp/p.txt &
#睡一會,0.001秒
sleep 0.001
done
done

#3.處理成功的ip地址
cat /tmp/p.txt | cut -d ” ” -f2

rm -rf /tmp/p.txt

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

(0)
會飛的蝸牛會飛的蝸牛
上一篇 2018-03-26
下一篇 2018-03-26

相關推薦

  • elk

    轉載,供日后回查

    2018-07-31
  • CENTOS開機流程

    開機流程 centos 5和6版本開機流程kernel==>rootfs(根文件系統)首先內核啟動,然后加載根文件系統,然后啟動init(第一個文件系統)它負責所有的程序的啟動、管理、調用、刪除等(這一切是運行在用戶空間的)。 “`kernel:進程管理內存管理網絡管理驅動程序文件系統安全功能 rootfs:glibc“` 庫:…

    Linux筆記 2018-05-13
  • mysql數據庫的安裝

    實戰:rpm包安裝 1、yum安裝 centos6上yum install mysql-server rpm -ql mysql-server /etc/rc.d/init.d/mysqld? 服務名(服務腳本的名稱) /usr/libexec/mysqld? 數據庫的主程序(二進制的程序路徑與平時看到的二進制程序路徑不一樣) /var/lib/mysql?…

    Linux筆記 2018-06-11
  • 運維之pxe、dhcp、cobbler

    運維之pxe、dhcp、cobbler 把一個主機接入TCP/IP網絡,要配置哪些網絡參數:ip/mask、gateway、dns server;參數配置方式:1、靜態配置;2、動態分配:a、bootp協議b、dhcp協議:引入了“租約”的bootp; DHCP:動態主機配置協議:arp:address resolving protocol:地址解析協議:I…

    Linux筆記 2018-07-22
  • 課堂筆記

    cat— 文本文件 1.cat/etc/centos/—release看到發行版名稱 lsb—releas—a ? ? ? ? ? ? ? ? ?? 看到發行版名稱 (centors? 7上如果看不到發行版名稱,并不是沒有,而是沒有安裝對映的軟件,生產環境中都是最小化安裝,默認安裝是最小文件) 2.sz/etc/centos—release傳到w…

    Linux筆記 2018-07-24
  • N31第三周

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d ‘ ‘ -f1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 ?w |cut -d ‘ ‘ -f1 |tail -1 |xargs id 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 cat /et…

    Linux筆記 2018-07-16
欧美性久久久久