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

作者&投稿:帅真 (若有异议请与网页底部的电邮联系)
在shell编程的for in循环中,如何在条件中使用两个变量。~

如果是bash, 可以用 for (( expr1; expr2; expr3 )) 这种循环语法来实现。 比如

for (( i=1, j=7; i3; i++, j-- ))
do
echo "i $i, j $j"
done

list集合中存储的应该是该对象才对吧,这时候只需要将list中的值强转为该对象的类的类型,然后赋值给该对象就行了
eg: People people=(People)list.get(i);
如果存储的是值的话,你需要在该对象的类中添加方法,该方法带一个list类型的参数,用于给类的属性赋值

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。



下图就是你要达到的目的吧,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



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

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

 

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


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


linux下如何写个SHELL脚本,每天执行这么几句命令:
1、登录CentOS7系统,打开终端,输入命令env shell打印出shell进程的环境变量。2、本地变量只存在当前shell进程。新建一个本地变量MYVAR=myvalue注意等号两边不能有空格。3、查看本地变量set查看指定本地变量set | grep MYVAR。4、导出本地变量为环境变量export MYVAR。5、删除本地变量或环境变量unset ...

哪位大神知道shell中给定分隔符,字符串,想知道它在文件的第几列命令...
既然没人回答你,那我就回答你吧。记得采纳哦。解释:查找\/etc\/passwd文件,里面查找字符串root,如果有打印相应的行号和列号## -F ":" 表示以:为分隔符##结果1 1表示第一行,第一列有root字符串##结果1 5表示第一行,第五列有root字符串##结果11 6表示第十一行,第六列有root字符串awk...

请教shell问题,请大神解答
给你举个例子 命令 | awk '{print $1,$4,$5}'

shell编程 请统计当前目录下的文件数目 哪位大神帮帮忙(shell初学者...
题主你好,统计当前目录下文件数目(不包含文件夹的数目):测试截图:从测试截图可以看出, 我当前目录下只有1个文件,名叫lisi, 其它的都是文件夹(以"-"打头的是文件, 以"d"打头的是文件夹), 执行命令后, 可以看到, 结果是1.--- 希望可以帮到题主, 欢迎追问.

各位大神帮忙写个shell脚本,如:变量a的值等于文件b的内容,脚本执行的目 ...
!\/bin\/shwhile :do read a c sync sleep 2done

linux shell课题,求大神教我!!!
exec 1>catfile.logexec 2>catfile.errcat -n $1 $2 $3

请教会linux shell脚本的=~是什么意思?
是正则表达式的字符判断 if [[ $i =~ ^[0-9]+$ ]] && echo 1 1、^是匹配字符串开始的意思,[0-9]只要不是数字都不要。2、~ +的意思的^[0-9]的范围里匹配一次以上+ $是匹配结束符。touch -t "201109021200.00" tempfile 使用引号内的时间戳在当前目录建立一个叫tempfile的文件 find...

linux shell自动交互问题,求大神解?
那就不要用判断, 直接在顶部写入过滤条件, 然后就执行下面的了。上面是C程序, 不知道楼主到底要干嘛的

求大神写一个shell抽奖脚本
你说的不明白,半成品给你吧,python..import os import random import requests count1 = 0 a = 0 while (count1 < 3):b = random.randint(3,5)print (b)a = a + 1 count1 = count1 + 1 if a > 5 :c = random.randint(4,5)print ("第二判断:",c)if a > 40 :d = ...

Shell语句, 请大神解释下下面语句的意思? []和{},还有斜杠的意思。
这个虽然是shell中的egrep语句 但是后面的内容并不是shell的意思而是正则表达式 1、\\是转义的意思,把一些特殊符号的特殊意义取消掉,让这个特殊符合就是它字面的意思 比如这里面的 \\\\ 意思就是一个字符\\ 没有特殊意思 2、[]在正则表达式中是表示匹配中括号内的范围中一个匹配的字符比如[0-9] 它...

繁峙县18669412809: shell脚本 ,如果用 for in 语句,读取一行内容,急用,请高手回答. for file in `ls - l - -full - time · -
油歪头孢: #!/bin/sh #设置IFS环境变量,这个变量是用来定义分隔符类型的.默认的分隔符为空格、换行符、tab. #在你的需求中,只需要设置IFS变量的内容为换行符. #先存储IFS默认值 IFS_old=$IFS IFS=$'\n' for line in $(ls -l --full-time) doecho $line done #将IFS变量还原为默认值 IFS=$IFS_old

繁峙县18669412809: shell里for循环的几种写法 -
油歪头孢: #从文件循环进入,注意aaa.txt每行中不能有空格,不然会有问题 for i in `cat aaa.txt` do echo $i done #数字循环 for i in `seq 1 100` do echo $i done #while,可以无视行中的空格 while read line do echo $line done < aaa.txt

繁峙县18669412809: for循环在shell中并不像c语言累加的形式,那具体怎么实现 -
油歪头孢: 1、shell中for也可以像c语言使用,例如 sum=0; for ((i=0;ido((sum=sum+i)); done2、shell中for也有其他的用法 for i in $(seq 1 10) do echo $i done3、for file in `ls /opt` do echo $file done4、for id in `cat a.txt` do echo $id done

繁峙县18669412809: linux shell for in 复制文件 特殊字符问题 -
油歪头孢: $ls 2011* ls: 2011*: 没有那个文件或目录$cd test$list=(2011_2 2011_3);for i in ${list[*]};do cp $i ../;done$cd ..$ls 2011*2011_2 2011_3#如果符合要求,请及时点采纳.

繁峙县18669412809: shell里的for循环怎么写 -
油歪头孢: for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止. 其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符...

繁峙县18669412809: shell怎么用for读取文件 -
油歪头孢: #!/bin/bash for i in `cat filename.txt` do echo $i done

繁峙县18669412809: 使用for语句创建一个shell程序,其功能为1+2+...+n -
油歪头孢: classic shell scripting stylex=0 for i in 1 2 3 4 5 6 7 8 9 10dox=`expr $i + $x`doneecho $xwith bashx=0 for i in {1..10}dox=$((i + x))doneecho $x------修改答案------------------楼下提示,我误会了问题,呵呵,最快是这样with bash#! /bin/...

繁峙县18669412809: shell中的for语句疑惑 -
油歪头孢: 以下是man里的说明,有说到如果 for in 的 in 语句省略的话,就对位置参数进行循环.所以你的理解是对的: for name [ [ in [ word ... ] ] ; ] do list ; done The list of words following in is expanded, generating a list of items. The variable name is set ...

繁峙县18669412809: 如何在python 的shell里运行for循环并且执行? -
油歪头孢: 就拿你这题来说吧,trainMat......这行和上行for循环空两个,而不是对齐,for循环体都是这样的,如果你用python集成开发环境(如Pycharm)是帮你自动对齐的,你按照这么写,直到for循环写完,然后按两次回车Enter,就可以执行for循环了.

繁峙县18669412809: shell脚本怎么写for循环 -
油歪头孢: for I in list; do statement done I 是变量 list是一个表格 如你可以使用一串用括号括起来的数,也可以使用 命令替换 `seq 1 15` 这个命令忘记了,, 有可能是 `seq 15` [1..15] 表示1-15的数,, statement 即要执行的语句 for I in [1..10]; do echo $I done 这段for循环的含义就是显示从1~10的所有数字

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网