當前位置:首頁 » 編程軟體 » shell腳本經典實例100

shell腳本經典實例100

發布時間: 2023-03-22 00:23:23

㈠ 編寫一個SHELL腳本程序計算1到100的和

#!/銀銷bin/鋒遲游旦春bash
j=0
for ((i=1;i<=100;i++));do
j=$(($i+$j))
done
echo $j

㈡ shell腳本中使用for.do循環語句列出從1到100的數字中能夠被3整除的數求出他們的和並輸出文件命名為sum.sh

#!/bin/bash
sum=0
for i in {1..100}
do
if [ $(( $i % 3 )) -eq 0 ]
then
echo $i
sum=$(( $sum + $i ))
fi
done
echo "sum is: $sum"

保存為sum.sh

㈢ shell腳本

Shell腳本基本知識
概述:shell其實是內核與用戶之間的一個介面,
shell腳本
如果有一系列經常使用的linux命令,你可以把它們存儲在一個文件腫。shenll可以讀取這個文件,並執行其中的命令。這樣的文件成為腳本文件。
執行shell腳本
要創建一個shell腳本,你要使用任何編輯器比如vi在文本文件中編寫他。
為了使用bashshell賴執行腳本magic,其命令是:bashmagic或者./magic
echo命令:
echo「!」
屏幕上就會回顯「!」
#符號
用於在shell腳本腫可以包含註解入口
echo「hello」
#thisisacommentline.thiswouldnotproceanyoutput!
echo「world!」
第二行是一個註解的例子。它將被shell忽略,而且不產生任何消息
變數:
可以在任何時間通過簡單的賦值來創建。
語法:
<variablename>-<value>
Linux中的所有變數都被當作字元串
引用變數:
$符號用於引用一個變數的內容
variable1=${variable2}
讀入值給變數
在執行shell腳本時,shell還允許用戶直接從鍵盤讀入一個值給變數,還可以使用read命令來作。
$readfname
本地和全局shell變數
局部變數
當引用shell時,只有創建它的shell能夠知道變數的存在
全局變數
稱為子shell
shell中創建的變數局部於創建它的shell,除非使用export命令特別指出是全局的。
環境變數:
通過改變這些變數的值,用戶能夠定製此環境
一些環境變數的例子是HOME,PATH,PS1,PS2,LOGNAME,SHLVL,及SHELL
HOME變數
Linux系統中的每個用戶都有一個相關的稱作HOME的目錄
當一個用戶登錄後,進入相應的HOME的目錄
$echo$HOME
PATH變數
包含一列用冒號定界的目錄的路徑名字,便於可執行程序的搜索。
PS1變數
PS1(PromptString1)變數包含了shell提示符,$符號
$PS1=「HELLO>」
HELLO>
PS2變數
是為第二個提示符設置值的環境變數
LOGNAME變數
包含用戶的注冊名字
$echo「${LOGNAME}」
SHLVL變數
該變數包含當前工作的shelllevel
SHELL變數
環境變數存儲了用戶預設的shell
env命令
可用來查看所有的已移出的環境變數表和它們各自的值!
命令替換
在單個命令行中使用多個命令的另外一種方法(非Pipes)是通過命令替換
echo「thedatais`date`」
expr命令
用於求之算術表達式。該命令的輸出被送到標准輸出
$expr4+5
將在屏幕上顯示9
算術展開:
你可以在$((…))中括一個表達式,用下面的命令來計算它的值;
$((expression))
example1
編寫一個shell腳本用於計算呼叫中心未應答的詢問的數量。該腳本應該接受一天那所報告的詢問的總數和應答的詢問的數量,以便計算未應答的詢問的數量。
所有未應答的詢問總數=所有詢問的總數-應答的詢問的數量
<!--[if!supportLists]-->※<!--[endif]-->※※※※※※※※※※※※※※※※※※※※※※※
條件執行
test和[]
求值表達式,並返回true(0)或false()
數值測試:
-eq等於則為真
-ne不等於則為真
-gt大於則為真
-ge大於等於則為真
-lt小於則為真
-le小於等於則為真
if構造
Linuxshell提供了循環和判定的構造,可以在shell腳本中使用
算術測試
結合if構造,它可以用於測試變數的數字值
串測試
test命令也可以用於字元串
=等於則為真
!=不相等則為真
-z字元串長度為零則為真
-n字元串長度不為零則為真
文件測試
test命令也可以用於檢查文件的狀態
-e文件存在則為真
-r文件存在並且可讀則為真
-w文件存在並且可寫則為真
-x文件存在並且可執行則為真
-s文件存在並且至少有一個字元則為真
-d文件存在並且為目錄則為真
-f文件存在並且為普通文件則為真
-c文件存在並且為字元型文件則為真
-b文件存在並且為塊特殊文件則為真
-a並且-o或者!非
exit命令
用於終止shell腳本的執行並返回到$提示符下
case。。。esac
shell腳本中使用的這個構造依據變數的值而執行一組特定指令
當變數的值和其中的一個值匹配的時候,就執行寫在該值下的一組命令。
example3
迭代
while構造
while<條件>
do
<命令(s)>
done
只有條件為真的時候,才能執行do與done之間的命令
until構造
until循環構造的求值模式於while循環相反
until循環將繼續執行直到求值的條件為真的時候
for構造
forvariable_namein<list_of_values>
do

done
for循環取一列值作為輸入並對循環中每個值執行循環
break和contineu命令
同其他語言中的用法
example4
控制進程的執行
請求後台處理
用於請求後台進程的符號是(&)
$wctempfile&
[1]2082
$vinewfile
檢查後台進程
ps(進程狀態)命令為每個當前的活動的每個進程產生一行入口。
終止後台進程
可用kill,如下所示
kill278
查看完成一個命令所花的時間
你可以使用time命令來查看一個命令從開始到結束所花的時間
timefine/etc–name「passwd」2>/dev/null/dev/null表明忽略錯誤信息。
管道的介紹
垂直條(|)是管道字元
它只是shell:「|」前面命令的輸出作為「|」之後命令的輸入發送
ls–l|more
用管道組合命令,功能強大

㈣ 請用Shell腳本編寫程序,將100以內能被3或7整除的數的和顯示出來.

#!/bin/bash
sum=0
foriin`seq1100`;do
a=$[$i%3]
b=$[$i%7]
if[$a-eq0]||[$b-eq0];then
sum=$[$sum+$i]
fi
done
echo$sum

㈤ 編寫shell的腳本實現1到100的相加,並輸出如下格式 1+2+3+........+100=

COUNTER=1
SUM=0
printf "啟銀%d" $COUNTER
while [ $COUNTER -le 100 ]do
SUM='expr $COUNTER+$SUM'
printf "+%d" $COUNTER
COUNTER='expr $COUNTER+1'
done
printf "=%d\衡旁坦咐桐n" $SUM

㈥ 編寫Shell腳本文件,在當前目錄下建立100個目錄,並給出執行該文件的步驟

用bash不用寫腳本,一行命令就成

printf 'user%01d\n' {1..100} | xargs mkdir

nc10@your-5554c55be4 ~
$ cd tmp

nc10@your-5554c55be4 ~/tmp
$ ls

nc10@your-5554c55be4 ~/tmp
$ pwd
/home/nc10/tmp

nc10@your-5554c55be4 ~/tmp
$ ls

nc10@your-5554c55be4 ~/tmp
$ printf 'user%01d\n' {1..100} | xargs mkdir

nc10@your-5554c55be4 ~/tmp
$ ls
user1/ user20/ user32/ user44/ user56/ user68/ user8/ user91/
user10/ user21/ user33/ user45/ user57/ user69/ user80/ user92/
user100/ user22/ user34/ user46/ user58/ user7/ user81/ user93/
user11/ user23/ user35/ user47/ user59/ user70/ user82/ user94/
user12/ user24/ user36/ user48/ user6/ user71/ user83/ user95/
user13/ user25/ user37/ user49/ user60/ user72/ user84/ user96/
user14/ user26/ user38/ user5/ user61/ user73/ user85/ user97/
user15/ user27/ user39/ user50/ user62/ user74/ user86/ user98/
user16/ user28/ user4/ user51/ user63/ user75/ user87/ user99/
user17/ user29/ user40/ user52/ user64/ user76/ user88/
user18/ user3/ user41/ user53/ user65/ user77/ user89/
user19/ user30/ user42/ user54/ user66/ user78/ user9/
user2/ user31/ user43/ user55/ user67/ user79/ user90/

nc10@your-5554c55be4 ~/tmp
$

或者用seq

mkdir $(seq -f 'user%01g' 1 100)

nc10@your-5554c55be4 ~/tmp
$ ls

nc10@your-5554c55be4 ~/tmp
$ mkdir $(seq -f 'user%01g' 1 100)

nc10@your-5554c55be4 ~/tmp
$ ls
user1/ user20/ user32/ user44/ user56/ user68/ user8/ user91/
user10/ user21/ user33/ user45/ user57/ user69/ user80/ user92/
user100/ user22/ user34/ user46/ user58/ user7/ user81/ user93/
user11/ user23/ user35/ user47/ user59/ user70/ user82/ user94/
user12/ user24/ user36/ user48/ user6/ user71/ user83/ user95/
user13/ user25/ user37/ user49/ user60/ user72/ user84/ user96/
user14/ user26/ user38/ user5/ user61/ user73/ user85/ user97/
user15/ user27/ user39/ user50/ user62/ user74/ user86/ user98/
user16/ user28/ user4/ user51/ user63/ user75/ user87/ user99/
user17/ user29/ user40/ user52/ user64/ user76/ user88/
user18/ user3/ user41/ user53/ user65/ user77/ user89/
user19/ user30/ user42/ user54/ user66/ user78/ user9/
user2/ user31/ user43/ user55/ user67/ user79/ user90/

nc10@your-5554c55be4 ~/tmp
$

㈦ 學透shell 帶你寫常用的100個 shell 腳本(一)定時刪除過期文件

本文已參與「新人創作禮」活動,一起開啟掘金創作之路。

需要清理伺服器中過期的文件、日誌、臨時壓縮未清理的垃圾文件、過久的備份文件,手動刪除過於繁瑣,可以通過此腳本進行刪除,如有不同場景,適量修改即可

目標:刪除 /home/logs/下超過30天的日誌文件,文件名稱為xxxx-service-2022-06-18-20.out

如果只需單次清理,只需要執行刪除命令即可

添加定時任務,設置每個月1號晚上4點10分執行腳本.當然你也可以根據你自己的需求去整

OK ,此次結束 🔚。

㈧ 編寫shell腳本sum求1-100累加和

sum=0
for((i=1;i<=100;i++));do
sum=$((i+sum))
done
echo$sum

很多很多者老種方法,可首灶升辯畢以網上搜一下貼

㈨ shell程序實現1-2+3-4……-100求和

flag=1;

sum=0;

for((i=1;i<=100;i++));do

add=`expr $flag * $i

sum=`expr $sum + $add`

flag=`expr 0 - $flag`

done

echo $sum

或:

#include<iostream>

using namespace std;

int main()

{

int sum=0;

int i;

for(i=1;i<=100;i++)

sum=sum+i;

cout<<"1+2+3+...+100="<<sum<<endl;

}

(9)shell腳本經典實例100擴展閱讀:

本示例使用Shell函數來完成一個用戶指定的應用程序。將第二個參數值設成1,可讓該模中盯培埋程序以正常大小的窗口完成,並且擁有焦點。 Dim RetValRetVal = Shell("C:WINDOWSCALC.EXE", 1) ' 完成Calculator。

使用shell腳本調用linux中當前時間,並記錄在log文件中,10秒後再次記錄時間。

date>>/tmp/data.log

sleep10

date>>/tmp/data.log

參考旦和資料來源:網路-shell

㈩ 分享70個經典的 Shell 腳本面試題與答案

1) 如何向腳本傳遞參數 ?

./script argument

2) 如何在腳本中使用參數 ?

第一個參數 : $1 ,第二個參數 : $2

cp $1 $2

3) 如何計算傳遞進來的參數 ?

$#

4) 如何在腳本中獲取腳本名稱 ?

$0

5) 如何檢查之前的命令是否運行成功 ?

$?

6) 如何獲取文件的最後一行 ?

tail-1

7) 如何獲取文件的第一行 ?

head-1

8) 如何獲取一個文件每一行的第三個元素 ?

awk'{print $3}'

9) 假如文件中每行第一個元素是 FIND,如何獲取第二個元素

awk'{ if ($1 == "FIND") print $2}'

10) 如何調試 bash 腳本

將 -xv 參數加到 #!/bin/bash 後

例子:

#!/bin/bash –xv

11) 舉例如何寫一個函數 ?

12) 如何向連接兩個字元串 ?

輸出

HelloWorld

13) 如何進行兩個整數相加 ?

14) 如何檢查文件系統中是否存在某個文件 ?

15) 寫出 shell 腳本中所有循環語法 ?

for 循環 :

while 循環 :

until 循環 :

16) 每個腳本開始的 #!/bin/sh 或 #!/bin/bash 表示什麼意思 ?

這一行說明要使用的 shell 。 #!/bin/bash 表示腳本使用 /bin/bash 。對於 python 腳本,就是 #!/usr/bin/python 。

17) 如何獲取文本文件的第 10 行 ?

head -10 file|tail -1

18) bash 腳本文件的第一個符號是什麼

#

19) 命令: [ -z "" ] && echo 0 || echo 1 的輸出是什麼

0

20) 命令 「export」 有什麼用 ?

使變數在子 shell 中可用。

21) 如何在後台運行腳本 ?

nohup command&

大部分時間我們可能是遠程使用Linux,我碰到過由於網路斷線使得在後台運行的 command & 沒了...

22) "chmod 500 script" 做什麼 ?

使腳本所有者擁有可執行許可權。

23) ">" 做什麼 ?

重定向輸出流到文件或另一個流。

24) & 和 && 有什麼區別

25) 什麼時候要在 [ condition ] 之前使用 「if」 ?

當條件滿足時需要運行多條命令的時候。

26) 命令: name=John && echo "My name is $name" 的輸出是什麼

My name is John

27) bash shell 腳本中哪個符號用於注釋 ?

#

28) 命令: echo ${new:-variable} 的輸出是什麼

variable

29) ' 和 " 引號有什麼區別 ?

30) 如何在腳本文件中重定向標准輸出和標准錯誤流到 log.txt 文件 ?

在腳本文件中添加 "exec >log.txt 2>&1" 命令。

31) 如何只用 echo 命令獲取字元串變數的一部分 ?

例子:

32) 如果給定字元串 variable="User:123:321:/home/dir" ,如何只用 echo 命令獲取 home_dir ?

echo ${variable#*:*:*:}

echo ${variable##*:}

33) 如何從上面的字元串中獲取 「User」 ?

echo ${variable%:*:*:*}

echo ${variable%%:*}

34) 如何使用 awk 列出 UID 小於 100 的用戶 ?

awk -F: '$3<100' /etc/passwd

35) 寫程序為用戶計算主組數目並顯示次數和組名

36) 如何在 bash shell 中更改標準的域分隔符為 ":" ?

IFS=":"

37) 如何獲取變數長度 ?

${#variable}

38) 如何列印變數的最後 5 個字元 ?

echo ${variable: -5}

39) ${variable:-10} 和 ${variable: -10} 有什麼區別?

40) 如何只用 echo 命令替換字元串的一部分 ?

echo ${variable//pattern/replacement}

41) 哪個命令將命令替換為大寫 ?

tr '[:lower:]' '[:upper:]'

42) 如何計算本地用戶數目 ?

wc -l /etc/passwd|cut -d" " -f1 或者 cat /etc/passwd|wc -l

43) 不用 wc 命令如何計算字元串中的單詞數目 ?

44) "export $variable" 或 "export variable" 哪個正確 ?

export variable

45) 如何列出第二個字母是 a 或 b 的文件 ?

ls -d ?[ab]*

46) 如何將整數 a 加到 b 並賦值給 c ?

47) 如何去除字元串中的所有空格 ?

echo $string|tr -d " "

48) 重寫這個命令,將輸出變數轉換為復數: item="car"; echo "I like $item" ?

item="car"; echo "I like ${item}s"

49) 寫出輸出數字 0 到 100 中 3 的倍數(0 3 6 9 …)的命令 ?

for i in {0..100..3}; do echo $i; done

for (( i=0; i<=100; i=i+3 )); do echo "Welcome $i times"; done

50) 如何列印傳遞給腳本的所有參數 ?

echo $*

echo $@

51) [ $a == $b ] 和 [ $a -eq $b ] 有什麼區別

52) = 和 == 有什麼區別

53) 寫出測試 $a 是否大於 12 的命令 ?

[ $a -gt 12 ]

54) 寫出測試 $b 是否小於等於 12 的命令 ?

[ $b -le 12 ]

55) 如何檢查字元串是否以字母 "abc" 開頭 ?

[[ $string == abc* ]]

56) [[ $string == abc* ]] 和 [[ $string == "abc*" ]] 有什麼區別

57) 如何列出以 ab 或 xy 開頭的用戶名 ?

egrep "^ab|^xy" /etc/passwd|cut -d: -f1

58) bash 中 $! 表示什麼意思 ?

後台最近執行命令的 PID.

59) $? 表示什麼意思 ?

前台最近命令的結束狀態。

60) 如何輸出當前 shell 的 PID ?

echo $$

61) 如何獲取傳遞給腳本的參數數目 ?

echo $#

62) $* 和 $@ 有什麼區別

63) 如何在 bash 中定義數組 ?

array=("Hi" "my" "name" "is")

64) 如何列印數組的第一個元素 ?

echo ${array[0]}

65) 如何列印數組的所有元素 ?

echo ${array[@]}

66) 如何輸出所有數組索引 ?

echo ${!array[@]}

67) 如何移除數組中索引為 2 的元素 ?

unset array[2]

68) 如何在數組中添加 id 為 333 的元素 ?

array[333]="New_element"

69) shell 腳本如何獲取輸入的值 ?

a) 通過參數

./script param1 param2

b) 通過 read 命令

read -p "Destination backup Server : " desthost

70) 在腳本中如何使用 "expect" ?

熱點內容
解壓到當前文件夾右鍵 發布:2024-04-26 03:57:08 瀏覽:979
html5android教程視頻下載 發布:2024-04-26 03:09:59 瀏覽:867
伺服器的描述是什麼 發布:2024-04-26 03:08:32 瀏覽:394
個人加密 發布:2024-04-26 03:01:23 瀏覽:521
linuxusbgadget 發布:2024-04-26 02:52:54 瀏覽:304
我的世界空島世界伺服器地址 發布:2024-04-26 01:39:08 瀏覽:248
尼爾機械紀元加密 發布:2024-04-26 01:37:11 瀏覽:868
在控制台輸出sql語句 發布:2024-04-26 01:08:12 瀏覽:432
動畫java 發布:2024-04-26 01:02:40 瀏覽:12
得力文件夾5302 發布:2024-04-26 00:21:32 瀏覽:91