第十二章 shell指令碼課後習題

2021-10-04 12:19:00 字數 2977 閱讀 8521

1.編寫shell指令碼,計算1~100的和。

[root@zl_cloud sbin]# cat 1.sh

#! /bin/bash

sum=0

for i in `seq 1 100`;do

sum=$[$i+$sum]

done

echo $sum

[root@zl_cloud sbin]#

2.編寫shell指令碼,輸入乙個數字n並計算1~n的和。要求:如果輸入的數字小於1,則重新輸入,直到輸入正確的數字為止。

正確答案:

[root@zl_cloud sbin]# vi 2.sh

#! /bin/bash

read -p "please input a num:" n

while ((n<1));do

read -p "輸入數字小於1,請重新輸入:" n

done

for i in `seq 1 $n`;do

sum=$[$i+$n]

done

echo $sum

[root@zl_cloud sbin]#

這是我第一次嘗試的用if語句(後面發現是錯的):

#! /bin/bash

read -p "please input a num:" n

if ((n<1));then

read -p "輸入數字小於1,請重新輸入:" n

else

for i in `seq 1 $n`;do

sum=$[$i+$n]

done

echo $sum

fi

發現大於等於1時是可以計算的,但是到了小於1的數字時,它只會說重新輸入,輸入完就直接退出這個指令碼了,於是我又嘗試了:

#! /bin/bash

read -p "please input a num:" n

if ((n<1));then

read -p "輸入數字小於1,請重新輸入:" n

for i in `seq 1 $n`;do

sum=$[$i+$n]

done

echo $sum

else

for i in `seq 1 $n`;do

sum=$[$i+$n]

done

echo $sum

fi

然後我又試了一下小於1的部分,它提醒我重新輸入,重新輸入後它會空一行,然後退出指令碼。(可能是直接輸出了$sum,但是for沒有計算。最後我就換了while語句,得到答案)

3.編寫shell指令碼,把/root/目錄下的所有目錄(只需要一級)複製到/tmp/目錄下。

[root@zl_cloud sbin]# vi 3.sh

#! /bin/bash

cd /root/

for f in `ls`;do

if [ -d $f ];then

cp -r $f /tmp/

fidone

[root@zl_cloud sbin]#

4.編寫shell指令碼,批量建立使用者user_oo, user_01… user_99。要求:所有使用者同屬於users組。
[root@zl_cloud sbin]# vi 4.sh

#! /bin/bash

groupadd users

for i in `seq -w 0 99`;do

useradd -g users user_o$i'

done

[root@zl_cloud sbin]#

[root@zl_cloud sbin]# vi 5.sh

#! /bin/bash

touch /root/shell.txt

touch /root/shell1.txt

awk -f ':' '$0~/abc/ ' /root/test.log > /root/shell.txt

sort -n /root/shell.txt |uniq -c |sort -n > /root/shell1.txt

awk '$1>10 ' /root/shell1.txt

[root@zl_cloud sbin]#

6.編寫shell指令碼,判斷輸入的ip是否正確。要求:ip的規則是n1.n2.n3.n4,其中1
[root@zl_cloud sbin]# vi 6.sh

#! /bin/bash

checkip()

\.[0-9]\.[0-9]\.[0-9]$'

then

a=`echo $1 | awk -f '.' ''`

b=`echo $1 | awk -f '.' ''`

c=`echo $1 | awk -f '.' ''`

d=`echo $1 | awk -f '.' ''`

for n in $a $b $c $d;do

if [ $n -ge 255 ] || [ $n -le 0 ];then

echo "the num should less than 255 and greate than 0"

return 2

fidone

else

echo "the ip is wrong,the format is like 192.168.10.129"

return 1

fi}

rs=1

while [ $rs -gt 0 ];do

read -p "please input the ip:" ip

checkip $ip

rs=`echo $?`

done

echo "the ip is right"

[root@zl_cloud sbin]#

程式設計珠璣第十二章習題

1.rand 一般返回約15個隨機位。用該函式實現bigrand 和randint l,u 要求前者至少返回30個隨機位,後者返回 l,u 範圍內的乙個隨機整數。int bigrand int randint int l,int u 2.在0 n 1範圍內選擇m個整數,在該範圍內隨機選擇乙個數i,然...

第十二章 檔案

文字檔案 文字檔案是一種由若干字元構成的檔案,可以用文字編輯器進行閱讀或編輯。以txt py html等為字尾的檔案都是文字檔案。2.二進位制檔案 二進位制檔案一般是指不能用文字編輯器閱讀或編輯的檔案。以 mp4 png等為字尾的檔案都是二進位制檔案,如果想要開啟或修改這些檔案,必須通過特定軟體進行...

第十二章 dp

動態規劃策略 將原始問題拆分為多個子問題,將子問題結果記錄,方便復用子問題的解 遞迴 記憶化 遞推 是動態規劃的一體兩面,本質都是一樣的 遞推減少了呼叫次數,空間上還能優化,一般選擇遞推方式 遞迴 記憶化 int memo maxn 將o 2 n o n intfibonacci int n 遞推 ...