43.shell腳本循環與函數

shell腳本循環與函數

for 循環

for 循環用于一次性讀取多個信息,逐一對信息進行操作處理,特別適合處理有范圍的數據

語法
for 變量名 in 取值列表
do命令序列
done
批量創建用戶
#!/bin/bashtouch /root/users.txt
echo aka blues cloe dio foks > /root/users.txtread -p "給用戶設置密碼:" PASSWD
for i in `cat /root/users.txt`
douseradd $iecho "$PASSWD" | passwd --stdin $iecho "$i"用戶創建成功
done

在這里插入圖片描述

循環輸出
#!/bin/bash
echo "自增"
for ((i=1;i<=10;i++))
doecho $i
doneecho "自減"
for ((i=10;i>=1;i-=2))
doecho $i
done

在這里插入圖片描述

計算數字1-100的整數和
#!/bin/bash
a=0
for ((i=1;i<=100;i++))
doa=$(($i+$a))
done
echo "1-100所有整數和為 $a"

在這里插入圖片描述


while 循環

while 循環重復測試某個條件,只要條件成立就反復執行

顯示 0-10 的所有整數

#!/bin/bash
a=0
while [ $a -le 10 ]
doecho $alet a++
done

在這里插入圖片描述

計算 1-100 的整數和

#!/bin/bash
a=0
b=1
while [ $b -le 100 ]
doa=$(($a+$b))let b++
done
echo "1-100的和: $a"

在這里插入圖片描述

猜數字游戲

隨機猜1000以內的數字

#!/bin/bash
num=$(expr $RANDOM % 1000)
a=0
echo "猜數字的范圍為0-999的整數"
while true
do
read -p "請輸入你猜的數:" nlet a++
if [ $n -gt $num ];thenecho "猜的數字過大"
elif [ $n -lt $num ];thenecho "猜的數字過小"
elseecho "恭喜你猜對了"echo "你猜的次數為 $a"exit
fi
done

在這里插入圖片描述


until 循環

until 循環重復測試某個條件,只要條件不成立就反復執行(與while相反)

求1-100的整數和

#!/bin/bash
a=0
b=1
until [ $b -gt 100 ]
doa=$(($a+$b))let b++
done
echo "1-100的和: $a"

在這里插入圖片描述


雙for循環

在一個for循環內部再加一個for循環

#!/bin/bash
for ((a=1;a<=3;a++))
doecho "a=$a"for((b=1;b<=5;b++))doecho "b=$b"
done
done

a每加1,b就循環一次

在這里插入圖片描述

break 和 continue
  • break:跳出當前循環
  • continue:中止某次循環,不會完全終止整個命令
#!/bin/bash
for ((a=1;a<=3;a++))
doecho "a=$a"for((b=1;b<=5;b++))doif [ $b -eq 3 ];thenbreak	#當b=3時,就停止運行fiecho "b=$b"
done
done

在這里插入圖片描述

#!/bin/bash
for ((a=1;a<=10;a++))
do
if [ $a -gt 4 ]&&[ $a -lt 8 ];thencontinue	#當a大于4小于8時,停止循環
fiecho "$a"
done

在這里插入圖片描述


用shell腳本寫一個九九乘法表
#!/bin/bash
for ((i=1; i<=9; i++))
dofor ((o=1; o<=i; o++))dolet c=$i*$oecho -n "$i*$o=$c "doneecho ""
done
[root@xieyuhui ~]# bash a.sh 
1*1=1 
2*1=2 2*2=4 
3*1=3 3*2=6 3*3=9 
4*1=4 4*2=8 4*3=12 4*4=16 
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

函數

函數將命令序列按格式寫在一起,可重復使用。

函數定義格式
# 方式一
function 函數名 {命令序列
}# 方式二
函數名() {命令序列
}

使用 return 退出函數并返回一個退出值(0-255),通過 $? 顯示

#!/bin/bash
function x {read -p "請輸入任意一個整數:" nreturn $[$n*2]
}
x
echo "$?"

在這里插入圖片描述

函數傳參

函數變量的作用范圍(局部變量以及全局變量)
函數在shell腳本中僅在當前shell環境中有效
shell腳本中變量默認全局有效
將變量限定一個函數的內部local,即局部變量

#!/bin/bashnum1 (){num=$[ $1+$2 ]echo $num
}
num1 $1 $2

在這里插入圖片描述


局部變量與全局變量

將變量限定在函數內部使用local命令
即這個local的變量僅僅在當前的函數內有效,在別的函數中無效。

#!/bin/bashabc (){echo "為經過local的變量$i"	#此時局內變量未定義,因此是全局變量i=9local ii=6echo "函數內的變量$i"	  #此時局內變量已定義,因此為i=6
}
i=9
abc
echo "外面變量$i"		#局內定義的變量只能在定義的函數中使用,因此此處為全局變量

在這里插入圖片描述

遞歸函數

遞歸函數調用自身

#!/bin/bashfunction a(){if [ $1 -eq 1 ];thenecho 1elselocal temp=$[$1-1]local result=`a $temp`echo $[result * $1 ]fi
}read -p "輸入一個值:" va
result=`a $va`
echo "階乘的值為: $result"

在這里插入圖片描述


函數庫

將常用函數集中放在一個腳本中,在需要使用時直接調用即可

先寫一個函數庫

[root@xieyuhui ~]# vim hsk.sh
#!/bin/bash
jia(){result=$[ $1 + $2 ]echo "$result"
}jian(){result=$[ $1 - $2 ]echo "$result"
}cheng(){result=$[ $1 * $2 ]echo "$result"
}chu(){if [ $2 -ne 0 ];thenresult=$[ $1 / $2 ]echo "$result"elseecho "除法中分母不能為0"fi
}
[root@xieyuhui ~]# chmod +x hsk.sh
[root@xieyuhui ~]# vim aa1.sh
#!/bin/bash
. /root/hsk.shread -p "請輸入第一個數字:" n
read -p "請輸入第二個數字:" mresult1=`jia $n $m`
result2=`jian $n $m`
result3=`cheng $n $m`
result4=`chu $n $m`echo "兩數之和為: $result1"
echo "兩數之差為: $result2"
echo "兩數之積為: $result3"
echo "兩數之商為: $result4"

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96407.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

模型部署:(四)安卓端部署Yolov8-v8.2.99實例分割項目全流程記錄

模型部署&#xff1a;&#xff08;四&#xff09;安卓端部署Yolov8-v8.2.99實例分割項目全流程記錄1、下載ncnn2、下載opencv-mobile3、文件拷貝4、andorid_studio相關配置5、文件內參數設置5、重構項目&#xff1a;6、打包apk7、部署自己訓練的實例分割模型1、下載ncnn 地址&…

高并發、低延遲全球直播系統架構

一、 核心架構圖 整個系統的數據流和工作流程如下圖所示&#xff0c;它清晰地展示了從主播推流到觀眾觀看的完整過程&#xff1a; #mermaid-svg-QzNpj0DWxd5FERPC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QzN…

AWS strands agents 當智能體作為獨立服務/容器部署時,它們無法共享進程內狀態

當智能體作為獨立服務/容器部署時&#xff0c;它們無法共享進程內狀態。 以下是針對分布式部署中動態內存庫的生產就緒解決方案&#xff1a;1. 基于外部存儲的內存庫基于 DynamoDB 的共享內存import boto3 from strands import Agent, tool from typing import Dict, Any impor…

第五節 JavaScript——引用類型、DOM/BOM 與異步編程

JavaScript 的第五節課通常會深入探討 ??引用類型、DOM 操作、BOM 操作、事件處理以及異步編程?? 等核心概念。這些知識能讓你創建動態交互豐富的網頁。下面我將詳細講解這些內容并提供示例。 ?? JavaScript 第五節:引用類型、DOM/BOM 與異步編程 ? 一、引用類型 引…

使用Pycharm進行遠程ssh(以Featurize為例)

使用Pycharm進行遠程ssh&#xff08;以Featurize為例&#xff09;文章目錄介紹應用背景遠程連接Python連接Jupyter介紹應用背景 在使用Pycharm 專業版的時候進行遠程ssh連接服務器&#xff08;Featurize&#xff09;的Python解釋器和Jupyter 遠程連接Python 打開Pycharm點擊…

深入研究:ClickHouse中arrayExists與hasAny在ORDER BY場景下的性能差異

最近公司大數據情況下ClickHouse查詢性能極差&#xff0c;后來發現在大數據量ORDER BY場景下&#xff0c;arrayExists(x -> x in ...)比hasAny性能快10倍&#xff01;&#xff01;&#xff01;&#xff01; 一、問題重述與研究背景 在大數據量 ORDER BY場景下&#xff0c;…

Spring AI (二)結合Mysql做聊天信息存儲

上文講了&#xff0c;用Spring ai做簡單的聊天功能&#xff0c;沒看過的可以查看下 Spring AI結合豆包模型 這里簡單結合下Jdbc做下聊天記錄的存儲和查詢&#xff0c;讓對話變的更智能。 首先是Pom的支持 <dependency><groupId>org.springframework.ai</grou…

【docker】data-root 數據遷移(防止無法加載鏡像和容器問題)

操作系統&#xff1a;ubuntu 24.04 docker版本&#xff1a;docker-ce 28.1.1 目標&#xff1a;將/var/lib/docker 的數據遷移到/data/docker停止docker sudo systemctl stop docker.socket sudo systemctl stop docker這個步驟一定要做&#xff0c;否則容易導致數據不一致。 rs…

二、網頁的“化妝師”:從零學習 CSS

一、CSS 是什么 1.1 CSS 的定義 CSS&#xff08;Cascading Style Sheets&#xff0c;層疊樣式表&#xff09; 是一種用來給 HTML 頁面 添加樣式的語言。 簡單來說&#xff1a; HTML 負責結構 —— 決定網頁上有什么內容。 CSS 負責樣式 —— 決定這些內容“長什么樣”。 如果…

傳統項目管理與敏捷的核心差異

在項目管理領域&#xff0c;傳統方法與敏捷方法代表了兩種不同的管理思維與實踐路徑。傳統項目管理強調計劃性、規范性和階段性推進&#xff0c;而敏捷則注重靈活性、快速迭代和價值交付。 正如彼得德魯克所說&#xff1a;“沒有完美的計劃&#xff0c;只有不斷調整的行動。”理…

axios+ts封裝

http.ts import axios from axios import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from axios import qs from qs/*** 擴展AxiosRequestConfig&#xff0c;增加一些自定義的屬性* isAuth: 自定義的參數中&#xff0c;用來判斷是否攜帶token 因為AxiosReq…

2026新選題:基于K-Means實現學生求職意向聚類推薦職位

作者簡介&#xff1a;Java領域優質創作者、CSDN博客專家 、CSDN內容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構師設計經驗、多年校企合作經驗&#xff0c;被多個學校常年聘為校外企業導師&#xff0c;指導學生畢業設計并參與學生畢業答辯指導&#xff0c;…

SpringCloud gateway配置predicates的匹配規則

需求 通過gateway的route規則&#xff0c;實現分組流量配置 資源 一個nacos&#xff0c;一個gateway &#xff0c;一個服務app&#xff08;部署雙實例group-1&#xff0c;group-2&#xff09;&#xff0c;實現特定條件下往分組一和分組二流量切換。 方案 1 配置文件 nacos…

android14 硬鍵盤ESC改BACK按鍵返回無效問題

在之前的android版本中修改外接鍵盤ESC為BACK按鍵做返回鍵使用&#xff0c;直接修改如下代碼即可&#xff1a;--- a/frameworks/base/data/keyboards/Generic.kcmb/frameworks/base/data/keyboards/Generic.kcm-499,7 499,7 key PLUS {### Non-printing keys ###key ESCAPE { …

【開題答辯全過程】以 asp高校外賣訂單系統的設計與實現為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

UVa1063/LA3807 The Rotation Game

UVa1063/LA3807 The Rotation Game題目鏈接題意輸入格式輸出格式分析AC 代碼IDA*分3次BFS題目鏈接 本題是2004年icpc亞洲區域賽上海賽區的H題 題意 如下圖所示形狀的棋盤上分別有8個1、2、3&#xff0c;要往A&#xff5e;H方向旋轉棋盤&#xff0c;使中間8個方格數字相同。圖&…

用pywin32連接autocad 寫一個利用遺傳算法從選擇的閉合圖形內進行最優利用率的排版 ai草稿

好的&#xff0c;我們來深入細說遺傳算法&#xff08;Genetic Algorithm, GA&#xff09;在鈑金自動排版中的應用。遺傳算法 (GA) 在鈑金排版中的詳細解析遺傳算法是一種受達爾文生物進化論啟發的元啟發式優化算法。它不追求一次性找到數學上的絕對最優解&#xff0c;而是通過模…

Go語言io.Copy深度解析:高效數據復制的終極指南

在日常開發中&#xff0c;我們經常需要在不同的數據源之間復制數據。無論是文件操作、網絡傳輸還是進程通信&#xff0c;數據復制都是不可或缺的基礎操作。Go語言的標準庫提供了一個強大而高效的工具來簡化這一過程&#xff1a;io.Copy。 什么是io.Copy&#xff1f; io.Copy是G…

【Vue3】07-利用setup編寫vue(2)-setup的語法糖

其它篇章&#xff1a; 1.【Vue3】01-創建Vue3工程 2.【Vue3】02-Vue3工程目錄分析 3.【Vue3】03-編寫app組件——src 4.【Vue3】04-編寫vue實現一個簡單效果 5.【Vue3】05-Options API和Composition API的區別 6.【Vue3】06-利用setup編寫vue&#xff08;1&#xff09; 7.【Vue…

Firefox自定義備忘

1.設置firefox右鍵點擊標簽直接關閉&#xff0c;由于目前沒有插件能實現這個功能&#xff0c;只能手動設置了&#xff08;目前已知支持142和之前的版本&#xff09; firefox117右鍵關閉macWin 117版本應該可以了&#xff0c;大家可試下&#xff0c;配置方法參考之前的帖子&…