请教大神shell的for in语句中怎么使用多个变量
B是文本文件:里面有10行内容
C是目录:里面有10个文本
echo $A $B $C
要求写一个shell脚本
要遍历循环输出这3个变量
总的意思就是怎么在for in 循环中使用多个变量 展开
1、遍历按空格分隔的字符串:
#!/bin/bash
servers="abc123 das 222"
for server in$servers
do
echo$server
done
2、遍历字符串列表、用空格分隔:
#!/bin/bash
for server in a b c
do
echo$server
done
3、遍历参数列表:
#!/bin/bash
for arg in $*
do
echo$arg
done
4、遍历文件目录:
#!/bin/bash
for i in ~/*.sh
do
echo$i
cat$i
done
注:$i是整个目录和文件,for in语句也可以与` `和$( )配合使用,例如:
#!/bin/bash
for i in $(ls~/*.sh)
do
echo$i
cat$i
done
扩展资料:
LInux shell之(for in)用法总结
一、语法
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))
doneecho -e "total is:${total}"
#多行注释
<<COMMENRfor i in mysql_{0,1,4,12}sql
#多个文件
do
echo $i
samtools view -c $i
doneCOMMENT
第二类:字符性循环
最原始的
#!/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/bashfor
in $(cat 日志颜色.sh)
#注意:pwd当前目录下的文件
do
echo $i
done
第三类:路径查找
ls在in后面的命令是-->读取当前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
如果是bash,,可以用自 for (( expr1; expr2; expr3 )) 这种循环语法来实现。比如for (( i=1, j=7; i<5 && j >3; i++, j-- )),do,,echo "i $i, j $j",done。注意变量名称的第一个字符不可以是数字,但是可以是下划线。要使用变量的值,在变量前面加上$符号即可。
使用% :%表示参数,参数是在运行批处理文件时在文件名后加的字符串。变量可以从 %0到%9,%0表示文件名本身,字符串用%1到%9顺序表示。
扩展资料
shell脚本中的if多条件语句
在shell中条件语句是“if-then”,if语句后面是一个命令执行度结束的退出状态码是 0,则执行 then 部分的命令,否则then 不执行;fi是if的结束标志。if语句的嵌套使用和其他语言基本一致,直接在if中继续使用if语句即可。
嵌套的层数没有限制,但最好不要过多的层数,这样会让代码显得比较混来,难以理解,多个版条件判断使用“if then-elif then”,这里和其他编程语言不同,最后可以加else也可以不加else。
你的意思是,对于文本文件,遍历显示内容;对于目录,遍历输出其中的文件名,是这样吗?
如果我理解得不对,请纠正!
for in 循环本身就是针对多数据(数据集合)的循环,数据集合内的数据之间以空格分隔。
在循环中对集合中的每个元素分别判断是文本文件还是目录,然后做不同处理即可。
#!/bin/bash
A=/path1/file1
B=/path1/file2
C=/path2
for elem in $A $B $C
do
if [ -f $elem ]; then #文本文件
echo "${elem}:"
cat $elem
echo "---------------------------------------" #华丽的分隔线
fi
if [ -d $elem ]; then #目录
echo "${elem}:"
ls $elem
fi
done
Linux Shell中的变量可以被指定为任意的数据类型,比如文本字符串或者数值。你也可以通过修改Shell中的变量来改变Shell的样式。
Shell支持三种定义变量的方式:
variable=value
variable='value'
variable="value"
variable是变量名,value是赋给变量的值。如果value不包含任何空白符(例如空格、Tab缩进等),那么可以不使用引号;如果value包含了空白符,那么就必须使用引号包围起来。注意,赋值号=的周围不能有空格。
Shell变量的命名规范和大部分编程语言一样:变量名由数字、字母、下划线组成;必须以字母或者下划线开头;不能使用Shell里的关键字(通过help命令可以查看保留关键字)。
Linux中Shell变量分为系统变量和用户自定义变量,系统变量包括$HOME、$PWD、$SHELL、$USER、echo $SHELL以及显示当前Shell中所有变量set。
Shell自定义变量包括1)定义变量:变量=值;2)撤销变量:unset变量;3)声明静态变量:readonly变量,注意不能unset;4)使用export把变量提升为全局环境变量,如/etc/profile中的TOMCAT_HOME变量,且在另外的/opt/tmp/shell/myShell.sh脚本中使用该环境变量。
Shell设置环境变量
基本语法:
1)export:变量名=变量值(功能描述:将shell变量输出为环境变量)
2)source:配置文件(功能描述:让修改后的配置文件立即生效)
3)echo:$变量名(功能描述:查询环境变量的值)
单行注释:#
多行注释::<<!需要注释的内容!
Shell脚本很适合处理纯文本类型的数据,而Linux中几乎所有的配置文件、日志文件(如NFS、Rsync、Httpd、Nginx、MySQL等),以及绝大多数的启动文件都是纯文本类型的文件。Shell是运维人员必须要掌握的技能,此外还需要掌握Linux、信息安全、Docker容器等。