shell指令碼 迴圈和函式

2022-07-02 21:51:12 字數 4402 閱讀 3321

1、列印乙個等腰三角形

#!/bin/bash

for i in `seq

10` ;do

for j in `seq $[10-$i]` ;do

echo -n '

'done

for k in `seq $[i*2-1]` ;do

echo -n '*'

done

echo

done

2、列印99乘法表

#!/bin/bash

for i in ;do

for (( j=1; j<=$i; j++ )) ;do

accumulate=$[i*j]

echo -ne "

$*$=$accumulate\t

"done

echo

done

3、輸入網段,探測網段內存活的主機

#!/bin/bash

trap

'exit'2

read -p "

please input a network address:

"dnet

echo $dnet |grep -qe "

^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.)0$

" ||

for i in ;do

.$i &>/dev/null ;then

echo

"$.$i is up."fi

}&done

unset dnet

unset i

wait

4、列印西洋棋棋盤

#!/bin/bash

read -p "

size:

"bsize

line=$[bsize*8-1

]for i in `seq

0 $line` ;do

for j in `seq

0 $line` ;do

if [ $[(i/bsize+j/bsize)%2] -eq 0 ] ;then

echo -ne "

\033[47m \033[0m

"else

echo -n ""fi

done

echo

done

5、編寫函式(my_functions),實現列印綠色ok和紅色failed

#print ok and failed#######################################

green_ok()

red_failed()

screen=`stty -f /dev/tty size`

columus=$

spa_col=$[columus-26

]progress() ;do

echo -n "."

sleep

0.5done

}success() ]

echo -n "

$string

"progress

for i in `seq $rt_spa` ;do

echo -n "

"done

green_ok

}failed() ]

echo -n "

$string

"progress

for i in `seq $rt_spa` ;do

echo -n "

"done

red_failed

}

6、編寫指令碼copycmd.sh

(4) 複製此命令依賴到的所有庫檔案至目標目錄下的對應路徑下;

(5)每次複製完成乙個命令後,不要退出,而是提示使用者鍵入新的要複製的命令,並重複完成上述功能;直到使用者輸入quit退出;

#!/bin/bash

. my_functions

ddir="

/mnt/sysroot

"[ ! -d "

$ddir

" ] && mkdir

"$ddir

"cpbin() $

" ] && mkdir -p "$$"

cp -n "

$cmd_path""

$$"}libcp() $

" ] && mkdir -p "$$"

cp -n "

$line""

$$" 2>/dev/null

done

}while read -p "

input a cmd. (quit):

" cmd ;do

if [ "

$cmd

" == '

quit

' ] ;then

echo

"think you! bye bye.

"; break; fi

if ! which

"$cmd

" &>/dev/null ;then

echo

"not find $cmd, please input again.

"failed

"copy $cmd failed.

"continue

ficmd_path=`which $cmd |grep -o "

/.*"

` lib_path=`ldd $cmd_path |sed -nr 's#.*[[:space:]]+(/.*) .*#\1#p'`

cpbin

libcp

success

"copy $cmd complete.

"done

7、求斐波那契數列的第n個數

#!/bin/bash

feibo()

read -p "

please a num:

" n

8、求n的階乘

#!/bin/bash

fact()

fact $

1

9、漢諾塔:問題是源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤,利用函式,實現n片盤的漢諾塔的移動步驟。

hannuota() 

read -p "

please input num: "n

hannuota $n a b c

10、編寫服務指令碼testsrv.sh,完成如下要求

(4) 如是stop:則刪除/var/lock/subsys/script_name, 並顯示「停止完成」

(5) 如是restart,則先stop, 再start

(6) 如是status, 則如果/var/lock/subsys/script_name檔案存在,則顯示「script_name is running...」 如果/var/lock/subsys/script_name檔案不存在,則顯示「script_name is stopped...」 其中:script_name為當前指令碼名

(7)在所有模式下禁止啟動該服務,可用chkconfig 和 service命令管理

#!/bin/bash

# chkconfig: 2345 98 01

. /root/bin/35_my_functions

lockfile="

/var/lock/subsys/testsrv

"s_start()

s_stop()

s_status()

s_usage()

"exit 1}

[ $# -ne 1 ] &&s_usage

case $1

instart)

s_start

;;stop)

s_stop

;;restart)

if [ -f "

$lockfile

" ] ;then

s_stop

s_start

else

failed

"testsrv is not running , stop

"s_start

fi;;

status)

s_status

;;*) s_usage

esac

個人學習筆記,只供參考 ^_^

shell指令碼中 函式和跳出迴圈

函式相當於乙個指令碼 塊 它可以把乙個功能封裝起來。使用時直接在指令碼中呼叫函式名字 使用函式的好處是可以使指令碼模組化 變的簡便 函式的建立 function 函式名 function可寫可不寫 使用函式時 直接在指令碼中輸入函式名就可以了 例如 bin bash function func1 c...

shell 指令碼while迴圈和for迴圈

1.1 while 當條件為真時就進行迴圈,條件不成立時退出 提示使用者輸入 y 或 y 來終止程式。a用在判斷式中表示 and bin bash while aa y a aa y do read p please input y y to stop this program aa done1.2...

shell指令碼 for迴圈

迴圈語句 while對於要求控制迴圈次數 操作物件按數字順序編號,按特定條件執行重複操作。重複測試某個條件時,只要條件成立就會反覆執行 無限 除非強制終止,或者exit語句退出指令碼 for迴圈語句 需要指定乙個變數以及可以取值的取值列表,針對每乙個不同的取值執行相同的命令序列,直到變數值用盡,退出...