前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell脚本专题(04):循环

shell脚本专题(04):循环

作者头像
loong576
发布2021-03-11 11:13:03
1.5K0
发布2021-03-11 11:13:03
举报
文章被收录于专栏:运维ABC运维ABC

一、专题背景

最近使用了个自动化平台(详见自动化运维平台Spug测试)进行每周的变更,效果很不错,平台将大量重复繁琐的操作通过脚本分发方式标准化自动化了,平台核心是下发到各个服务器的shell脚本,感觉有必要对shell脚本做个总结,所以有了写本专题的想法。本专题将结合运维实际介绍shell脚本的各项用法,预计10篇左右,将包括系统巡检、监控、ftp上传下载、数据库查询、日志清理、时钟同步、定时任务等,里面会涉及shell常用语法、注意事项、调试排错等。

二、本文前言

本文是该专题的第四篇。

循环是编程的一部分,shell脚本的编写离不开循环。文章主要介绍了通过两层for循环查找可执行文件和使用while循环创建用户这两个示例。

三、脚本测试

1.查找可执行文件

本文示例展示了如何通过两层循环查找可执行文件。脚本如下:

[root@shell ~]# more find_exe.sh 
#!/bin/bash
#查找用户环境变量中的可执行文件 
IFS=:
for folder in $PATH
do
echo "$folder:"
for file in $folder/*
do
if [ -x $file ]
then
echo " $file"
fi
done
done
[root@shell ~]# ./find_exe.sh |more
/usr/local/sbin:
/usr/local/bin:
 /usr/local/bin/chardetect
 /usr/local/bin/docker-compose
 /usr/local/bin/jsonschema
 /usr/local/bin/__pycache__
 /usr/local/bin/wsdump.py
/usr/sbin:
 /usr/sbin/accessdb
 /usr/sbin/addgnupghome
 /usr/sbin/addpart
 /usr/sbin/adduser
 /usr/sbin/agetty
 /usr/sbin/alternatives
 /usr/sbin/anacron
 /usr/sbin/applygnupgdefaults

运行时使用more命令分页,不然输出的命令太多会刷屏

image-20210303143913588
image-20210303143913588

  • '#!/bin/bash':脚本首行,声明执行脚本的shell
  • 'IFS=:':自定义分隔符为:
  • 'for folder in PATH':开启外层循环,使用for命令循环读取变量\PATH并赋值给folder
  • 'for file in folder/*':内层循环,将\folder/路径下循环找到的文件赋值给file
  • 'if [ -x $file ]':判断file是否为可执行文件,是则通过echo输出
  • 'done':结束循环,和do匹配
2.批量新增用户

本示例展示了如何用循环方式创建用户

[root@shell ~]# more useradd.sh 
#!/bin/bash
# 批量新增用户 
input="users.txt"
while IFS=','';' read  username tips shell
do
echo "adding $username"
useradd -c "$tips" -m -s $shell $username
done < "$input"
[root@shell ~]# 
[root@shell ~]# more users.txt 
si,li si;/bin/bash
san,zhang san;/bin/bash
wu,wang wu;/bin/bash
[root@shell ~]# 
[root@shell ~]# ./useradd.sh 
adding si
adding san
adding wu
image-20210302171117272
image-20210302171117272

  • users.txt为用户列表,包含用户名,用户备注和用户登录的shell环境;
  • users.txt为变量input的值作为 while 命令的重定向数据,即通过read命令读取users.txt并通过自定义IFS区分出username、tips和登录的shell。
  • IFS为内部字段分隔符,默认将空格、制表符和换行符当做分隔符,这里更改为','和';'。

四、本文总结

本文通过两个循环示例:查找可执行文件和批量新增用户,介绍了for循环和while循环的基本使用。同时也对read、IFS、冲入重定向做了说明。循环是shell编程的重要内容,学好循环可以为今后的学习打下牢固的基础。

本文所有脚本和安装包文件已上传github:shell-scripts-04

更多请点击:shell专题

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、专题背景
  • 二、本文前言
  • 三、脚本测试
    • 1.查找可执行文件
      • 2.批量新增用户
      • 四、本文总结
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档