網站首頁 編程語言 正文
前言
本篇是shell編程for循環的實現過程以及一些案例
什么是for循環
讀取不同的變量值,用來逐個執行同一組命令
for 變量名 in 取值列表
do
? ? 命令序列
done
#用變量名去取值,然后挨個執行命令,其實就是一個遍歷的過程
循環體中三種專業的話術:遍歷、迭代、遞歸
[root@bogon ~]# for i in {1..10} > do > echo $i > done 1 ... 10 [root@bogon ~]# for i in $(seq 1 10); do echo $i; done 1 ... 10 #分號可以使交互式的命令在一行執行 [root@bogon ~]# for ((i=1;i<=10;i++)); do echo $i; done 1 ... 10 #類似于java、c語言
示例1:批量添加用戶
用戶名存放在users.txt文件中,每行一個初始密碼均設為000000
[root@bogon sh]# vim addusers.sh #!/bin/bash #demo add users for USER in $(cat /data/users.txt) do useradd $USER echo "000000" |passwd --stdin $USER done
示例2:根據IP地址檢查主機狀態
IP地址存放在ipadds.txt文件中,每行一個使用ping命令檢測各主機的連通性
[root@bogon sh]# vim testping.txt #!/bin/bash #demo test ping for host in $(cat /data/ip.txt) do ping -c 3 -i 0.5 -w 2 $host &> /dev/null if [ $? -eq 0] then echo "$host is online" else echo "$host is offline" fi done
[root@bogon sh]# vim testping.txt #!/bin/bash #demo test ping 192.168.109.0/24 for host in {1..254} do ping -c 3 -i 0.5 -w 2 192.168.109.$host &> /dev/null if [ $? -eq 0] then echo "$host is online" else echo "$host is offline" fi done
示例3:自動生成一個8位隨機密碼 取值范圍大小寫字母和數字
字符串分片
i="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" 0 61 ${i:n:m} #i是變量名,n是開始取值的下標,下標從0開始,m是取值長度 ${#變量名} #取字符串長度 echo ${i:3:3} #取值456 echo ${i:7:1} #取值8 變量1+=變量2 #字符串追加
生成隨機數
echo $[$RANDOM % 62] #生成0-61的隨機數 echo $[$RANDOM % ${#i}] #生成該變量名長度以內的隨機數 num=$($[$RANDOM % ${#i}]) for i in {1..8} do echo ${i:$num:1} done #從i變量值中取隨機數,每次取一個,取8次
示例代碼
[root@localhost sh]# vim random.sh #!/bin/bash #隨機生成8位隨機密碼 #定義密碼取值范圍 String="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" #循環8次 for i in {1..8} do #每次循環隨機獲取0到字符串長度-1的下標值 num=$[RANDOM % ${#String}] #進行字符串截取 var=${String:num:1} #每次追加生成密碼 passwd+=$var done echo "本次生成的隨機密碼為:$passwd"
?
編寫腳本應該注意的事項:
- 開頭指定使用什么shell,例如:bash,ksh,csh等
- 腳本功能描述,使用方法,作者,版本,日期等
- 變量名,函數名要有實際意義,函數名以動名詞形式,第二個單詞首字母要大寫。例如:updateConfig()
- 縮進統一用4個空格,不用TAB
- 取變量值使用大括號,如${varname}
- 刪除文件時,如果路徑有變量的,要判斷變量有值,如rm -f ${abc}/* 如果變量abc沒有值,則會把根目錄下的文件刪除
- 腳本中盡量不要使用cd變換目錄
- 函數中也要有功能描述,使用依法,版本,日期等
- 函數的功能要單一,不要太復雜
- $()比` `更好
- 盡量不要使用多層if語句,而應該以case語句替代
- 如果需要執行確定次數的循環,應該用for語句替代while語句
- 輸入的參數要有正確性判斷
- 多加注釋,方便自己或他人閱讀。
總結
總的來說for循環還是比較簡單的只要理解他的固定格式就行
for 變量名 in 取值列表
do
? ? 命令序列
done
#用變量名去取值,然后挨個執行命令,其實就是一個遍歷的過程
原文鏈接:https://blog.csdn.net/qq_42327944/article/details/124085632
相關推薦
- 2022-09-25 uniapp封裝request請求的方法
- 2023-04-20 navicat 連接 mongodb 報錯[13][Unauthorized] command li
- 2022-01-20 出現SLF4J: Failed to load class “org.slf4j.impl.Stat
- 2022-07-03 C#入門之結構類型Struct_C#教程
- 2022-03-03 Module parse failed: Unexpected token (3:27) File
- 2023-07-13 遍歷對象并改變對象某個屬性的值
- 2021-11-06 C語言?如何用堆解決Topk問題_C 語言
- 2022-10-13 Python教程之類型轉換詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支