LInux shell之(for in 用法总结)

2023-05-16

一、语法

for 变量名  in  列表
  do
     程序段(command)
  done

注意1:是变量名不是$变量

注意2:列表可以做文章!

二、应用

第一类:数字性循环-->seq在in后面的应用

#!/bin/bash  
#也是产生等差数列-->默认是1
for i in $(seq 1 10)  #产生的是一个字符串,默认IFS是以空格隔开!
  do   
    echo $(expr $i \* 3 + 1);  #主要是复习:expr乘法的特殊用法!-->空格隔开
  done   

补充:产生[1,10]的自然数-->{}在in后面的应用

total=0 #全局变量
for i in {1..100} #".."表示连续,默认也是IFS为空格隔开
  do
    ((total+=i))
  done
echo -e "total is:${total}"

#多行注释
<<COMMENR
for i in mysql_{0,1,4,12}sql #多个文件
  do 
    echo $i
    samtools view -c $i 
  done
COMMENT

第二类:字符性循环

最原始的

#!/bin/bash
#使用列表for循环显示周一到周日对应的英文-->学习日期的英文
for day in Monday Tuesday Wednesday Thursday Friday Saturday Sunday 
  do
      echo "$day"
  done

变量的类型

#!/bin/bash  
list="Linux Java C++ Python"  
for i in $list  
  do  
    echo -e "Language is ${i}"   
  done  

cat在in后面的应用-->逐行读取文件的内容(默认是IFS),所以不是逐行打印!

#!/bin/bash
for i in $(cat 日志颜色.sh) #注意:pwd当前目录下的文件
 do 
   echo $i
 done

思考:如果想逐行原样输出

#!/bin/bash
# reading content from a file
file="日志文件.sh"
#将这个语句加入到脚本中,告诉bash shell在数据值中忽略空格和制表,使其只能识别换行符!
IFS=$'\n'
for std in $(cat $file)
  do
     echo "$std"
  done

说明:IFS的一些说明!

bash shell会将下列字符当作字段分隔符:空格、制表符、换行符

说明:如果在shell在数据中看到这些字符中的任意一个,它就会假定这表明了列表中一个新数据字段的开始!

参考的最佳安全实践:在改变IFS之前保存原来的IFS值,之后再恢复它。

保证了:在脚本的后续操作中使用的是IFS的默认值

实现

IFS.OLD=$IFS          #默认的IFS的数值-->也是环境变量!
IFS=$'\n'             #自定义的IFS数值
<在代码中使用新的IFS值> #待使用自定义IFS的部分!
IFS=$IFS.OLD          #恢复默认的IFS

第三类:路径查找

lsin后面的命令是-->读取当前pwd下的文件(广义上)!

#!/bin/bash  
for i in `ls`;  #ls可以结合统配符应用!
  do   
    echo $i is file name\! ;  #注意:\的应用!
  done   

 用通配符读取目录(无命令)

for file in ~/*;  #一级目录下的内容-->并不递归显示! 
  do  
     echo $file is file path \! ;  #${file}代表的是文件的全路径
  done 

通过脚本传参

#!/bin/bash
#回忆1:统计脚本参数的个数
echo "argument number are $#"!
#回忆2:参数的内容-->此处可以换成$@来测试!
echo "the input is $*"
#循环执行
for argument in "$*";
  do
      echo "$argument "
  done

IFS:内部字段分隔符

需求如下

#遍历一个文件中用冒号分隔的值:-->特殊文件-->/etc/passwd文件等!
IFS=:
#如果要指定多个IFS字符,只要将它们在赋值行串起来就行。
IFS=$'\n':;"

总结

#(1)从变量读取列表
# 将一系列的值都集中存储在一个变量中,然后需要遍历变量中的整个列表

#(2)从命令读取值
#有两种方式可以将命令输出赋值给变量:
# (1)反引号字符(`)
# (2)$()格式 

补充:在列表构成上分多种情景,如数字列表、字符串列表、命令列表、脚本传参列表等!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LInux shell之(for in 用法总结) 的相关文章

随机推荐

  • 【宝塔】【Windows】【Blessing-Skin】【我的世界】用宝塔Windows搭建皮肤站

    文章目录 前言所需环境相关链接安装宝塔安装步骤访问宝塔同意协议 安装环境安装WNMP添加站点 开始安装皮肤站配置网站配置Nginx URL重写规则 xff08 即 伪静态 xff09 配置PHP 安装皮肤站 一些小调整安装插件常见问题 插件
  • ping的详细过程学习笔记

    pc1 ping pc2 也就是pc1 xff1a 192 168 1 1 ping pc2 xff1a 192 168 1 2 属于同一网段的ping过程 步骤1 ping开始 即后台运行192 168 1 1 ping 192 168
  • FTPClient上传文件内容为空/损坏/缺失

    项目场景 xff1a 项目场景 xff1a 本地项目联调OA系统的时候 xff0c 在发送审批时会传送相关附件 xff0c 该附件由本地项目上传至FTP xff0c OA系统会根据我们提供的路径和文件名去FTP中找到该文件 问题描述 xff
  • Debian9桌面设置

    本文由荒原之梦原创 xff0c 原文链接 xff1a http zhaokaifeng com p 61 665 新安装的Debian9桌面上啥都没有 xff0c 就像这样 xff1a 图 1 虽然很简洁 xff0c 但是用着不是很方便 x
  • 爬虫遇到Cloudflare问题

    网址 xff1a https opensea io rankings sortBy 61 seven day volume 返回代码 xff1a 403 遇到的问题 xff1a Access denied api opensea io us
  • java servlet写的网页猜数小游戏

    几年前 xff0c 用java servlet 写了个猜数的网页小游戏 xff1b 今天看了觉得有点意思 xff0c 贴出来怀旧一下 xff1a 1 代码如下 xff1a package cn wzb import java io impo
  • 安卓-system.img镜像文件过大问题

    3126 5 1SDK预置过多apk时导致编译otapackage时报错处理 xff1a 1 修改prebuilts python linux x86 2 7 5 lib python2 7 zipfile py文件中为ZIP64 LIMI
  • 使用Tesseract-OCR识别图片中的文字并生成双层PDF

    识别图片中的文字并不是很困难 如果自己训练一个文字识别的深度学习程序去识别也是可以 xff0c 但是太费劲 Tesseract OCR是一个开源的文字识别引擎 xff0c 并且支持包括中文在内的多国语言 只要将语言配置上去 xff0c 就可
  • iptables(三)iptables命令详解

    一 语法规则 iptables t table COMMAND chain CONDITION j ACTION t table 是指 39 操作的表 39 filter nat mangle或raw 39 默认使用filter 39 CO
  • 单调栈lllll

    单调栈 xff0c 就是一个栈 xff0c 不过栈内元素保证单调性 即 xff0c 栈内元素要么从小到大 xff0c 要么从大到小 而单调栈维护的就是一个数前 后第一个大于 小于他的数 例题 xff1a P5788 模板 单调栈 例题就是一
  • cmake(六)Cmake添加工程子目录

    重点 xff1a 39 cmake3 39 和 39 make 39 命令 39 输出 39 的 39 深刻解读 39 备注 xff1a 当前阶段暂时不使用 39 IDE 39 工具 先 39 熟悉各指令 39 一 ADD SUBDIREC
  • nginx(二十七)长连接和短连接

    一 长连接和短连接 概念 1 39 HTTP 39 的长连接和短连接 39 本质 39 上是 39 TCP 39 长连接和短连接 2 在 39 HTTP 1 0 39 中默认使用 39 短 39 连接 解读 xff1a 客户端和服务器 39
  • nginx(七十四)nginx与跨域细节探究

    一 nginx配置跨域 知识铺垫 强调 xff1a 跨域是 39 浏览器 39 行为 39 不是 39 服务器行为 43 43 43 43 43 43 43 43 43 43 43 43 43 43 34 跨域的两种解决手段 34 43 4
  • HTTP1.1(一)HTTP协议

    一 HTTP协议定义 RFC7230定义 说明 xff1a 关注 39 红色关键字 39 无状态 解读 xff1a 连续的 39 两个 39 请求 后续的请求 39 不能依赖 39 前一个请求 各个请求是 39 相互独立 39 基于请求 相
  • nginx(七十五)nginx与Vary响应头细节探讨

    一 Vary nginx与Vary有关联的地方 nginx源码分析处理Vary响应头的逻辑 CORS和缓存 gzip vary 1 gzip vary on 如果设置为 39 开启 39 2 服务器 39 返回数据 39 时会在头部带上 3
  • JDK1.8之Lambada表达式一

    一 lambada表达式简介 我们知道对于Java变量可以赋给其一个值 而如果想将 34 一块代码 一个完整的方法 34 赋给一个Java变量 如下所示 xff0c 怎么做呢 xff1f 你可能认为 就是下面的方式来实现 很显然 xff0c
  • Oracle(三)

    一 概述 1 DML xff08 data manipulation language 数据操作语言 xff09 insert update delete 2 DDL data definition language 数据定义语言 crea
  • 项目中权限控制系统的设计

    RBAC 权限 xff1a 权利 能做的 和限制 不能做的 xff0c 在权限范围内做好自己的事情 xff0c 不该看的不看 机密 xff0c 不该做的不做 xff01 最开始真正有权限的概念是在Linux上关于文件和目录的权限 xff0c
  • 每天一个Linux命令之(read)

    一 概述 read命令特点 xff1a 1 接收 39 标准输入 键盘 39 的输入 或其它 39 文件 描述符 39 的输入 2 得到输入后 然后将数据 39 保存 39 一个 39 变量 39 中 核心点 xff1a 39 数据源 39
  • LInux shell之(for in 用法总结)

    一 语法 for 变量名 in 列表 do 程序段 command done 注意1 xff1a 是变量名 而不是 变量 xff01 注意2 xff1a 列表 可以做文章 xff01 二 应用 第一类 xff1a 数字性循环 gt seq