当前位置: 首页 > news >正文

shell中的for循环用法详解

for i in “file1” “file2” “file3”
for i in /boot/*
for i in /etc/*.conf
for i in $(seq -w 10) –》等宽的01-10
for i in {1..10}
for i in $( ls )
for I in $(< file)
for i in “$@” –》取所有位置参数,可简写为for i
注意:bash shell支持C式for循环

#!/bin/bash
j=$1
for ((i=1; i<=j; i++))
do
touch file$i && echo file $i is ok
done

 

复习
$@: 所有位置变量的内容
$#: 位置变量的个数
$0: 文件名
$*: 所有位置变量的内容
编写脚本应该注意的事项:
开头指定使用什么shell,例如:bash,ksh,csh等
脚本功能描述,使用方法,作者,版本,日期等
变量名,函数名要有实际意义,函数名以动名词形式,第二个单词首字母要大写。例如:updateConfig()
缩进统一用4个空格,不用TAB
取变量值使用大括号,如${varname}
删除文件时,如果路径有变量的,要判断变量有值,如rm -f ${abc}/*
如果变量abc没有值,则会把根目录下的文件删除
脚本中尽量不要使用cd变换目录
函数中也要有功能描述,使用依法,版本,日期等
函数的功能要单一,不要太复杂
$()比` `更好
尽量不要使用多层if语句,而应该以case语句替代
如果需要执行确定次数的循环,应该用for语句替代while语句
输入的参数要有正确性判断
多加注释,方便自己或他人阅读。
练习1:编写脚本清空所有arp缓存记录:

#!/bin/bash
for i in $(arp | tail -n +2|tr -s ' ' |cut -d' ' -f1)
do
arp -d $i
done

练习2:产生十个随机数:
方法1:

#for i in {0..9};do echo $RANDOM;done

方法2:

#for i in $(seq 10);do echo $RANDOM;done

练习3:倒数五秒:

#!/bin/bash
echo "准备倒数5秒:"
for i in $(seq 5 -1 1)
do
echo -en "$i";sleep 1
done
echo -e "开始"

方法2:

#!/bin/bash
echo "准备倒数5秒:"
for i in $(seq 5 -1 1)
do
echo -en "\b$i";sleep 1
done
echo -e "\b开始"

练习4:批量添加用户:

#!/bin/bash
for i in $(cat /root/users.txt) --》从列表文件读取文件名
do
useradd $i
echo "123456" | passwd --stdin $i --》通过管道指定密码字串
done

练习:
查找出uid大于10000的用户,然后删除,必须使用for循环。

#/bin/bash
u_uid=(`cat /etc/passwd | awk -F: '{print $3}'`)
u_name=(`cat /etc/passwd | awk -F: '{print $1}'`)
for i in `seq ${#u_uid[@] }`
do
if (( ${u_uid[i-1]} > 10000 ))
then
userdel -r ${u_name[i-1]}&&echo "${u_name[i-1]} delete ok"
fi
done

方法2:用正则找出大于10000的用户:

#cat /etc/passwd | egrep “1[0-9]{4} | [2-9]{5,}”

 


原文:https://blog.csdn.net/qq_18312025/article/details/78278989

 

 

 

-

 

转载于:https://www.cnblogs.com/Ph-one/p/10913769.html

相关文章:

  • 中药介绍
  • linux下的usb抓包方法
  • 自旋锁spin_lock和raw_spin_lock
  • git 优雅的撤销中间某次提交
  • 让个人域名下GithubPage完美支持https
  • CloudFlare 新手入门中文教程
  • DNS解析类型的区别
  • 免费版CloudFlare CDN基本设置参考
  • Git missing Change-Id in commit message footer解决方法
  • 循环神经网络(RNN)模型与前向反向传播算法
  • 在博客中使用MathJax写数学公式
  • 强化学习(一)模型基础[转]
  • 强化学习(二)马尔科夫决策过程(MDP)
  • Android 格式化分区命令
  • Keil综合(03)_map文件全解析[转]
  • CSS相对定位
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Markdown 语法简单说明
  • markdown编辑器简评
  • mysql中InnoDB引擎中页的概念
  • react 代码优化(一) ——事件处理
  • React系列之 Redux 架构模式
  • 阿里云前端周刊 - 第 26 期
  • 回顾 Swift 多平台移植进度 #2
  • 记一次删除Git记录中的大文件的过程
  • 协程
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 译有关态射的一切
  • Java总结 - String - 这篇请使劲喷我
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #Java第九次作业--输入输出流和文件操作
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (27)4.8 习题课
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C++17) optional的使用
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (论文阅读40-45)图像描述1
  • (五)Python 垃圾回收机制
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .Net 4.0并行库实用性演练
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Core中的去虚
  • .net 设置默认首页
  • .Net程序帮助文档制作
  • :如何用SQL脚本保存存储过程返回的结果集
  • ?.的用法
  • @RequestMapping-占位符映射
  • [Android 13]Input系列--获取触摸窗口
  • [C#]C#学习笔记-CIL和动态程序集
  • [CTF]php is_numeric绕过
  • [CTSC2014]企鹅QQ
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)