shell循環

一、for循環

?用法:

for 變量 in 取值列表

do

? ? ? ? 命令序列

done

例1:打印1到10的數字列表

#!/bin/bashfor i in {1..10}
do
echo $i
done

?例2:#批量添加用戶,用戶名存放在users.txt文件中,每行一個,初始密碼均設為123456

#!/bin/bashuserfile=/root/users.txtfor name in $(cat $userfile)
douseradd $nameecho 123456 | passwd --stdin $name &> /dev/null
done echo "批量添加用戶完成"

?例3:

根據IP地址檢查主機狀態 IP地址存放在ipadds.txt文件中,每行一個 使用ping命令檢測各主機的連通性

#!/bin/bash
#根據IP地址檢查主機狀態 IP地址存放在ipadds.txt文件中,每行一個 使用ping命令檢測各主機的連通性
filepath=/root/for/ipadds.txtfor hostip in $(cat $filepath)
doping -c 4 -i 0.5 -W 2 $hostip &> /dev/nullif [ $? -eq 0 ];thenecho "$hostip is online" >> /root/for/result.txtelseecho "$hostip is offline">> /root/for/result.txtfi
done

例4:

根據IP地址檢查主機狀態 使用ping命令檢測 192.168.80.10 20 30 40 50 60主機的連通性

#!/bin/bash
#根據IP地址檢查主機狀態 使用ping命令檢測 192.168.80.10 20 30 40 50 60主機的連通性for num in {1..6}
dohostip="192.168.80.${num}0"ping -c 4 -i 0.5 -W 2 $hostip &> /dev/nullif [ $? -eq 0 ];thenecho "$hostip is online"elseecho "$hostip is offline"fi
done

例5:

輸出1到10的整數,并判斷奇偶數

#!/bin/bash
#輸出1到10的整數,并判斷奇偶數for ((i=1; i<=10; i++))
doa=$[i % 2]if [ $a -eq 1 ];thenecho "$i 為奇數"   elseecho "$i 為偶數"fidone

例6:

根據IP地址檢查主機狀態 使用ping命令檢測 192.168.80.0~255 的主機,獲取在線的主機清單

#!/bin/bash
#根據IP地址檢查主機狀態 使用ping命令檢測 192.168.80.0~255 的主機,獲取在線的主機清單for num in {0..255}
do{hostip="192.168.80.$num"ping -c 4 -i 0.5 -W 2 $hostip &> /dev/nullif [ $? -eq 0 ];thenecho "$hostip is online" >> /root/host.txtfi}&
done
wait
cat /root/host.txt

例7:

輸出1到10的整數,并判斷奇偶數

#!/bin/bash
#輸出1到10的整數,并判斷奇偶數for ((i=1; i<=10; i++))
doa=$[i % 2]if [ $a -eq 1 ];thenecho "$i 為奇數"   elseecho "$i 為偶數"fidone

例8:

求1到10的和

#!/bin/bash
#求1到10的和
sum=0
for ((i=1; i<=10; i++))
{sum=$[sum + $i] 
}
echo "1到10的和為 $sum"

例9:

輸出PATH環境變量的目錄里所有以xy開頭的文件

#!/bin/bash
#輸出PATH環境變量的目錄里所有以xy開頭的文件IFS_OLD=$IFS
IFS=$IFS':'for i in $PATH
do#ls $i/xy* 2> /dev/nullfind $i -name "xy*" -print 2> /dev/null
done

例10:

求裴波拉切數:1,1,2,3,5,8,13,21,34,55,89...,數列從第3項開始每一項等于前兩項之和,打印前10個元素

#!/bin/bash
#求裴波拉切數:1,1,2,3,5,8,13,21,34,55,89...,數列從第3項開始每一項等于前兩項之和,打印前10個元素first=1
second=1for ((i=1; i<=10; i++))
doecho $firstC=$[first + second]first=$secondsecond=$C
done

例11:

自動生成一個8位數的隨機密碼,密碼范圍可以是小大寫字母和數字

#!/bin/bash
#自動生成一個8位數的隨機密碼,密碼范圍可以是小大寫字母和數字STR="0123456789shicaijundashuaigeABCDEFGHIJKLMNOPQRSTUVWXYZ"for ((i=1; i<=8; i++))
do#獲取字符串所有下標的隨機數num=$[RANDOM % ${#STR}]#根據隨機下標獲取一個隨機字符passd=${STR:num:1}#將隨機字符進行拼接password+=$passddoneecho "8位隨機密碼為 $password"

?例12

用戶名存放在users.txt文件中,每行一個,判斷文件里的用戶是否存在,若該用戶存在,輸出提示該用戶已存在;用戶存在但沒設密碼,則提示用戶并讓用戶設置密碼:若該用戶不存在,提示用戶輸入密碼,建立用戶并設立其密碼
?

#!/bin/bash
#用戶名存放在users.txt文件中,每行一個,判斷文件里的用戶是否存在,若該用戶存在,輸出提示該用戶已存在;用戶存在但沒設密碼,則提示用戶并讓用戶設置密碼:若該用戶不存在,提示用戶輸入密碼,建立用戶并設立其密碼usrfile=/root/users.txt
#循環遍歷文件里的每行用戶
for iname in $(cat $usrfile)
do#判斷是否存在grep "^$iname" /etc/passwd &> /dev/nullif [ $? -eq 0 ];thenecho "$iname 用戶已存在"#判斷用戶是否設置密碼userpasswd=$(cat /etc/shadow | grep "^$iname" | awk -F: '{print $2}')if [ "$userpasswd" == "!!" ] || [ "$userpasswd" == "*" ] || [ -z "$userpasswd" ];thenecho "$iname 用戶沒設密碼。"read -p "請設置 $iname 用戶的密碼:" pd1read -p "請確認設置 $iname 用戶的密碼:" pd2if [ "$pd1" == "$pd2" ];thenecho $pd1 | passwd --stdin $iname &> /dev/nullelseecho "密碼輸入不正確,放棄設置...."   fifi  else#創建不存在的用戶并設置密碼echo "$iname 用戶不存在,正常創建用戶....."read -p "請設置 $iname 用戶的密碼:" password1read -p "請確認設置 $iname 用戶的密碼:" password2if [ "$password1" == "$password2" ];thenuseradd $inameecho $password1 | passwd --stdin $iname &> /dev/nullelseecho "密碼輸入不正確,放棄設置...."   fifi
done

二、while循環

格式:

?while 條件測試操作

?do ? ?

命令序列

?done

例1:?

提示用戶輸入一個小于100的整數,并計算從1到該數之間所有整數的和

#!/bin/bash
read -p "請輸入一個100以內的數:" ia=1
sum=0
if [ $i -ge 1 ] && [ $i -le 100 ];thenwhile [ $a -le $i ]dolet sum+=alet a++doneecho "1到$i的總和為$sum"
elseecho "重新輸入"
fi

例2:

求1~100所有整數的偶數和、奇數和

#!/bin/bash
a=1
oddsum=0
evensum=0while [ $a -le 100 ]
do          b=$[ a%2 ] if [ $b -eq 0 ];thenlet evensum+=$aelse    let oddsum+=$afi         let a++
done
echo " 奇數為$oddsum,偶數為$evensum"

例3:

測試指定范圍主機是否通信,并將通信主機的Ip寫到host_ip文件中

#!/bin/basha=100
while [ $a -le 104 ]
dohostip=192.168.10.$aping -c 2 -i 0.5 -w 2 $hostip &> /dev/nullif [ $? -eq 0 ];thenecho "$hostip 在線" >> /root/host_ipfilet a++
donecat /root/host_ip

例4:

用戶輸入密碼,腳本判斷密碼是否正確,正確密碼為123456,輸入正確提示正確信息,連續輸錯3次則報警

#!/bin/bashi=0
while [ $i -le 2 ]
doread -p "輸入密碼:" passwordif [ $password == 123456 ];thenecho "密碼正確"exit 0 else     echo "密碼錯誤"fi       let i++ 
done
echo "超過三次" 

例5:

把0~255的十進制整數轉換成8位二進制數

#!/bin/bash
#把0~255的十進制整數轉換成8位二進制數
read -p "請輸入一個0~255的整數:" num
for i in 128 64 32 16 8 4 2 1
doNUM=$[num - i]if [ $NUM -lt 0 ];thenecho -n 0elseecho -n 1num=$[num - i]fi
done
echo ""

例6:

用while循環將一個200行的文件分割成多個50行的文件

#!/bin/bash
#用while循環將一個200行的文件分割成多個50行的文件filepath=/root/day10/test.txt
#定義行數計數器變量
a=0
#定義文件序號變量
i=1cat $filepath | while read line
dolet a++#判斷是否已經讀入50行,滿50行則文件序號+1c=$[a % 50]if [ $c -eq 0 ];thenecho $line >> /root/day10/test${i}.txtlet i++elseecho $line >> /root/day10/test${i}.txtfi
done

三、until循環

注:條件不符合就會一直循環,直到條件符合后才會退出循環

until 條件測試操作 ?

do ? ?

命令序列 ?

done?

例題:

打印數字1-10??

[root@localhost xunhuan]#until [ $i -gt 10   ]
> do
> echo $i
> let i++
> done

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

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

相關文章

KMP算法【C++】

KMP算法測試 KMP 算法詳解 根據解釋寫出對應的C代碼進行測試&#xff0c;也可以再整理成一個函數 #include <iostream> #include <vector>class KMP { private:std::string m_pat;//被匹配的字符串std::vector<std::vector<int>> m_dp;//狀態二維數組…

怎樣解決Redis高并發競爭Key難點?

Redis作為一種高性能的鍵值存儲系統&#xff0c;在現代分布式系統中發揮著重要作用。然而&#xff0c;高并發場景下對同一Key的操作可能引發競爭條件&#xff0c;給系統穩定性和數據一致性帶來挑戰。本文將探討如何解決這一問題&#xff0c;為讀者提供有效的應對策略。 1. Red…

【002】FlexBison實現原理

0. 前言 Flex和Bison是用于構建處理結構化輸入的程序的工具。它們最初是用于構建編譯器的工具&#xff0c;但它們已被證明在許多其他領域都很有用。 &#xfeff; 在第一章中&#xff0c;我們將首先看一點(但不是太多)它們背后的理論&#xff0c;然后我們將深入研究一些使用它…

Mysql和Postgresql創建用戶和授權命令

Mysql和Postgresql創建用戶和授權命令 MySQL/MariaDB/TiDB mysql -uroot -P3306 -p 輸入密碼&#xff1a;xxx create user user1% identified by xxx; grant all privileges on *.* to user1%; create user user2% identified by xxx; grant all privileges on *.* to user2%;…

Winform /C# 截圖當前窗體,指定區域,當前屏幕

1.當前窗體 public static Image CaptureControl(Control ctrl){System.Drawing.Bitmap bmp new System.Drawing.Bitmap(ctrl.Width, ctrl.Height);ctrl.DrawToBitmap(bmp, new Rectangle(0, 0, ctrl.Width, ctrl.Height));return bmp;}private void DownLoad(){string filePa…

java類中運行main方法時報錯:找不到或無法加載主類 XXX

運行main類報了這個錯 錯誤: 找不到或無法加載主類 XXX 經過好一番查證才找出了問題所在 原因是 maven項目的provided導致的&#xff0c;現在記錄一下。 將pom.xml中標注provided的注釋掉&#xff0c;就不報錯了。

ERROR [internal] load metadata for docker.io/library/node:20-alpine

docker編譯時報錯&#xff0c;除標題外&#xff0c;還報如下信息 ERROR: failed to solve: node:20-alpine: failed to resolve source metadata for docker.io/library/node:20-alpine: failed to do request: Head "https://registry-1.docker.io/v2/library/node/mani…

常用個人信息

目錄 常用聯系方式我的自動思維常用媒體專業相關康米相關黑歷史 常用聯系方式 QQ&#xff1a;2868679921 微信&#xff1a;Commieee 郵箱&#xff1a;sharvefoxmail.com 我的自動思維 常用媒體 嗶哩嗶哩 專業相關 博客 康米相關 QQ&#xff1a;1203361015 黑歷史 貼吧…

PyQt5學習系列之QMetaObject.connectSlotsByName

文章目錄 前言一、pandas是什么&#xff1f;二、使用步驟 1.引入庫2.讀入數據總結 學習記錄 QMetaObject.connectSlotsByName——自動將信號連接到槽&#xff08;函數&#xff09; 例如&#xff1a; from PyQt5.QtWidgets import QMainWindow, QPushButton from PyQt5.QtCore…

哪些類型的產品適合用3D形式展示?

隨著3D技術的蓬勃發展&#xff0c;眾多品牌和企業紛紛投身3D數字化浪潮&#xff0c;將產品打造成逼真的3D模型進行展示&#xff0c;消費者可以更加直觀地了解產品的特點和優勢&#xff0c;從而做出更明智的購買決策。 哪些產品適合3D交互展示&#xff1f; 產品3D交互展示具有直…

2024系統架構師--- 希賽模擬答案知識點

案例第一題&#xff1a; MVC架構包含&#xff1a;視圖、控制器、模型&#xff1b; 視圖&#xff08;View&#xff09;&#xff1a;視圖是用戶看到并與之交互的界面。視圖面向用戶顯示相關的數據&#xff0c;并能接收用戶的輸入數據&#xff0c;但是它并不能進行任何實際的業務…

深入探索微軟Edge:領略新一代瀏覽器的無限可能

深入探索微軟Edge&#xff1a;領略新一代瀏覽器的無限可能 在當今數字化時代&#xff0c;網絡瀏覽器已經成為我們日常生活中不可或缺的一部分。而隨著技術的不斷進步&#xff0c;瀏覽器的功能和性能也在不斷提升。微軟Edge作為微軟推出的全新一代瀏覽器&#xff0c;引領著瀏覽…

自己手寫一個字符串【C風格】

//字符串的常見操作 #include <iostream>#define MAX_SIZE 15 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status;//狀態類型 typedef char ElemType;//元素類型typedef ElemType String[MAX_SIZE 1];//第一個字節記錄長度//***tring是數…

c#自動生成缺陷圖像-添加新功能(可從xml直接提取目標數據,然后進行數據離線增強)--20240524

在進行深度學習時,數據集十分重要,尤其是負樣本數據。 故設計該軟件進行深度學習數據預處理,最大可能性獲取較多的模擬工業現場負樣本數據集。 該軟件基于VS2015、.NETFrameWork4.7.2、OpenCvSharp1.0.0.0、netstandard2.0.0.0、SunnyUI3.2.9.0、SunnyUI.Common3.2.9.0及Ope…

C盤磁盤空間不夠用,怎樣將d盤的空間劃分給c盤?

C盤磁盤空間不夠用&#xff0c;怎樣將d盤的空間劃分給c盤&#xff1f; 背景&#xff1a;win10系統下。C盤原有50G&#xff0c;如今只剩下8G&#xff0c;已經捉襟見肘了&#xff0c;想從D盤&#xff0c;割100G給C盤&#xff0c;以后軟件能直接裝C盤了。操作步驟如下&#xff1a…

2024年人文藝術與創新教育國際學術會議(ICHAIE 2024)

2024年人文藝術與創新教育國際學術會議&#xff08;ICHAIE 2024) 2024 International Conference on Humanities, Arts and Innovation Education 一、【會議簡介】 隨著全球化的推進和科技的迅猛發展&#xff0c;人文藝術與創新教育在培養未來人才方面扮演著越來越重要的角色…

溫故而知新-導航【面試復習】

溫故而知新-導航【面試復習】 前言版權溫故而知新-導航【面試復習】最后 前言 2024-5-18 00:01:31 以下內容源自《【溫故而知新】【面試復習】》 僅供學習交流使用 版權 禁止其他平臺發布時刪除以下此話 本文首次發布于CSDN平臺 作者是CSDN日星月云 博客主頁是https://jsss…

【深度學習】ONNX介紹

ONNX&#xff08;Open Neural Network Exchange&#xff09; ONNX 是一種用于表示深度學習模型的開放格式&#xff0c;使得不同深度學習框架&#xff08;如 PyTorch、TensorFlow、Caffe2 等&#xff09;之間的模型能夠相互交換。 需安裝&#xff1a; pip install --upgrade o…

docker 版 mysql 主從同步

docker 版 mysql 主從同步 1、環境2、搭建主服務器實例33062.1、命令2.3、進入/mydata/mysql-master/conf 目錄下新建 my.cnf2.4、修改完配置后重啟 master 實例2.5、進入 mysql-master 容器2.6、master 容器實例內創建數據同步用戶3、新建從服務實例 33083.1、命令3.2、進入/m…

springboot185基于vue.js的客戶關系管理系統(crm)的設計與實現-手把手調試搭建

springboot185基于vue.js的客戶關系管理系統(crm)的設計與實現-手把手調試搭建 springboot185基于vue.js的客戶關系管理系統(crm)的設計與實現-手把手調試搭建