请教大神shell的for in语句中怎么使用多个变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教大神shell的for in语句中怎么使用多个变量相关的知识,希望对你有一定的参考价值。

A是文本文件:里面有10行内容
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,12sql 

#多个文件

  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

参考技术A

如果是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。

参考技术B

下图就是你要达到的目的吧,1.txt为10行内容,2.txt为10行内容,C目录有10个文件,for.sh为实现的shell脚本。

上图就是你要达到的目的吧,1.txt为10行内容,2.txt为10行内容,C目录有10个文件,for.sh为实现的shell脚本。


或者如下图:

#!/bin/bash

a=(`cat 1.txt`)

b=(`cat 2.txt`)

c=(`ls C`)

for (( i = 0; i < 10; i++))

do

        echo $a[$i] $b[$i] $c[$i]

done

本回答被提问者采纳
参考技术C

你的意思是,对于文本文件,遍历显示内容;对于目录,遍历输出其中的文件名,是这样吗?

如果我理解得不对,请纠正!

 

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

参考技术D Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言,涵盖的知识点多且杂,却是云计算开发人员必须要掌握的技术之一。接下来就给大家梳理一下Shell变量相关的知识。

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容器等。

Shell脚本 for循环 while循环 case分支语句

################for循环语句的结构#############
使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,取值表 称为for语句的执行条件,其中包括多个属性相同的对象、需要预先指定(如通讯录、IP黑名单)
·
语法样式
for 变量名 in 取值列表
do
  命令序列
done
·
#####for循环语句列子####
需求:根据人事部门给出的员工姓名拼音列表,在Linux服务器中添加相应的用户账号,
初始密码均设置为“123456”,其中,员工列表的账户数量不固定,不相同。
·
1.编辑文本
[[email protected] ~]# cd /opt
[[email protected] opt]# vi users.txt
zhang3
li4
wang5
sun6
2.编辑脚本
##创建多个用户
[[email protected] opt]# vi uaddfor.sh
#!/bin/bash
ULIST=$(cat /opt/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &>/dev/null
done
·
##删除uaddfor.sh脚本添加的用户
cd opt
vi udelfor.sh
#!/bin/bash
ULIST=$(cat /opt/users.txt)
for UNAME in $ULIST
do
userdel -r $UNAME &>/dev/null
id $UNAME
done
·
##IP地址检查主机状态
[[email protected] opt]# vi ipadds.txt
192.168.10.1
192.168.10.2
192.168.10.3
192.168.10.4
·
[[email protected] opt]# vi chkhosts.sh
#!/bin/bash
HLIST=$( cat /opt/ipadds.txt )
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
echo "host $IP is up."
else
echo "host $IP is down."
fi
done
[[email protected] opt]# chmod +x chkhosts.sh
[[email protected] opt]# ./chkhosts.sh
host 192.168.32.1 is down.
host 192.168.32.2 is up.
host 192.168.32.3 is down.
host 192.168.32.11 is up.
·
#############while循环语句的结构###########
for循环语句非常适合列表对象无规则,且列表来源固定的场合,而对于需求控制的循环次数,操作对象按数字顺序的编号,按特定的条件执行重复操作等情况,则更适合使用一种循环语句----while语句。
while语句使用流程:首先判断while后条件测试操作结果,如果条件成立,则执行do......done循环体;返回while后,再次判断条件测试结果,如果条件仍然成立,则继续折行循环体;再次返回while后,判断条件测试结果........如此循环,直到while后的条件测试结果不在成立为止,最后跳到done语句,表示循环结束。
whlie特点:重复测试某个条件,只要条件成立则反复执行
·
语法样式
while 条件测试操作
do
命令序列
done
·
#####while循环语句实例#####
批量添加用户
用户名称以stu开头,按数字顺序进行编号
一共添加20个用户,即stu1、stu2、……、stu20
初始密码均设为123456
·
[[email protected] opt]# vi uaddwhile.sh
#!/bin/bash
PREFIX="stu"
i=1
while [ $i -le 20 ]
do
useradd ${PREFIX}$i
echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
let i++
done
[[email protected] opt]# chmod +x uaddwhile.sh
[[email protected] opt]# ./uaddwhile.sh
·
###删除用户###
[[email protected] opt]# cd /opt
[[email protected] opt]# vi udelwhile.sh
#!/bin/bash
PERFIX="stu"
i=1
while [ $i -le 20 ]
do
userdel -r ${PERFIX}$i
let i++
done
[[email protected] opt]# chmod +x udelwhile.sh
[[email protected] opt]# ./udelwhile.sh
·
·
###实例2###
猜商品价格游戏
通过变量RANDOM获得随机数
提示用户猜测并记录次数,猜中后退出循环
·
[[email protected] opt]# vi pricegame.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品的实际价格范围0-999,猜猜看是多少"
while true
do
read -p "请输入你猜猜的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜你答对了,实际价格是 $PRICE"
echo "您总共猜对了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
·
###解释###
1、while true 是代表无限循环下去
2、$RANDOM是Bash的内部函数,随机取值范围在0 - 32767之间
·
[[email protected] opt]# chmod +x pricegame.sh
[[email protected] opt]# ./pricegame.sh
商品的实际价格范围0-999,猜猜看是多少
请输入你猜猜的价格数目:900
太高了!
请输入你猜猜的价格数目:800
太高了!

请输入你猜猜的价格数目:325
恭喜你答对了,实际价格是 325
您总共猜对了 13 次
·
#############case分支语句的结构#############
针对变量的不同取值,分别执行不同的命令序列
·
###语法样式
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
 ……
)
默认命令序列
esac
·
###case使用特点
·
case行尾必须为单词"in",每一模式必须以")"结束
双分号";;" 表示命令序列结束
模式字符串中,可以用方括号表示已个连续的范围,如"[0-9]";还可以用竖杠符号"|"表示,如"A|B"
最后的"
" 表示默认模式,其中的相当于通配符。
·
###示例1
击键类型识别
提示用户输入一个字符
判断出该字符是字母、数字或者其他字符
·
vi hitkey.sh
#!/bin/bash
read -p "请输入一个字符,并Enter键确认:" KEY
case "$KEY" in
[a-z] | [A-Z])
echo "您输入的是 字母."
;;
[0-9])
echo "您输入的是 数字."
;;
)
echo "您输入的是 空格、功能键或者是其他控制字符."
esac
·
[[email protected] opt]# chmod +x hitkey.sh
[[email protected] opt]# ./hitkey.sh
请输入一个字符,并Enter键确认:A
您输入的是 字母.
[[email protected] opt]# ./hitkey.sh
请输入一个字符,并Enter键确认:a
您输入的是 字母.
[[email protected] opt]# ./hitkey.sh
请输入一个字符,并Enter键确认:1
您输入的是 数字.
[[email protected] opt]# ./hitkey.sh
请输入一个字符,并Enter键确认:
您输入的是 空格、功能键或者是其他控制字符.

以上是关于请教大神shell的for in语句中怎么使用多个变量的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本--------for循环

sql 请教update语句in多个值时,进行多次更新

请教大神thinkphp5 怎么打印sql语句

Shell脚本 for循环 while循环 case分支语句

android的listview怎么添加多个格式和布局不一样item,共有4个item?请教大神

SQL中in的问题请教