shell 遍历_shell遍历数组元素
如何用shell遍历一个目录下的所有子目录
DIR=$1可以使用ls或者find来完成对某个文件夹下所有文件的遍历比如使用ls
shell 遍历_shell遍历数组元素
shell 遍历_shell遍历数组元素
2)source:配置文件(功能描述:让修改后的配置文件立即生效)
ls 某个目录/
也可以使用find来完成
比如
find 某个目录
自然的也可以写一个shell脚本来进行遍历
首先进行一个要遍历的文件夹
然后循环查看每个文件
如果该文件是一个文件夹的话则进入该文件夹做和上面相同的
这样就可以该整个文件夹内的所有文件进行遍历了
如何在linux中使用shell脚本遍历指定目录的文件,将创建时间大于指定时间的文件,到指定目录下。
elif [ -f "$basepath" ];then大于指定时间?最简单的就是直接find里面指定吧。例如,查找当前目录及其子目录所有mtime大于1天的文件:
find
-t可以简单地使用一个通配符来完成ype
f-mtime
+1
即可,/path
可以换成其他路径,-mtime
+1
表示时间大于1天。-1的话表示小于一天也就是1天之内的。
请教大神shell的for in语句中怎么使用多个变量
到要查找的目录下,运行如果是bash,,可以用自 for (( expr1; expr2; expr3 )) 这种循环语法来实现。比如for (( i=1, j=7; i<5 && j >3; i++, j-- )),do,,echo "i $i, j $j",done。注意变量名称的个字符不可以是数字,但是可以是下划线。要使用变量的值,在变量前面加上$符号即可。
#!/bin/sh使用% :%表示参数,参数是在运行批处理文件时在文件名后加的字符串。变量可以从 %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]}
你的意思是,对于文本文件,遍历显示内容;对于目录,遍历输出其中的文件名,是这样吗?
如果我理解得不对,请纠正!
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}:"
fi
Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言,涵盖的知识点多且杂,却是云计算开发人员必须要掌握的技术之一。接下来就给大家梳理一下Shell变量相关的知识。
Linux Shell中的变量可以被指定为任意的数据类型,比如文本字符串或者数值。你也可以通过修改Shell中的变量来改变Shell的样式。
Shell支持三种定义变量的方式:
variable=value
variable='value'
variable="value"
variable是变量名,value是赋给变量的值。如果value不包含任何空白符(例如空格、Tab缩进等),那么可以不使用引号;如果value包含了空白符,那么就必须使用引号包围起来。注意,赋值号=的周围不能有空格。
Shell变量的命名规范和大部分编程语言一样:变量名由数字、字母、下划线组成;必须以字母或者下划线开头;不能使用Shell里的关键字(通过命令可以查看保留关键字)。
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变量输出为环境变量)
3)echo:$变量名(功能描述:查询环境变量的值)
单行注释:#
多行注释::<
Shell脚本很适合处理纯文本类型的数据,而Linux中几乎所有的配置文件、日志文件(如NFS、Rsync、Httpd、Nginx、MySQL等),以及绝大多数的启动文件都是纯文本类型的文件。Shell是运维人员必须要掌握的技能,此外还需要掌握Linux、信息安全、Docker容器等。
#来自:DZ动力(verydz)
解决shell脚本遍历带空格的文件/文件夹名
在做iOS Flutter依赖引入的时候,需要去遍历Pods 工程中的文件,而这个工程下刚好有一个名称带空格的文件夹。如下:
如下的脚本会出问题:
原因是,执行 ls 命令的时候,文件夹名称带了空格,被当成了分隔符。
网上查了一下相关资料,都是说把分隔符修改掉,使用时再改回来。于是脚本变成了这样:
但是这样还会有问题,我们知道 $1 是获取个参数,那么在名称带空格的文件夹递归入参时,又会因为空格的问题变成两个参数。那问题就变成:把过个参数变成一个参数。就是: $ 。 此外还需要特别注意的是,每一个引用带空格的文件或者文件夹名称时必须带上引号,才能成为一个整体。
最终脚本如/usr/bin/iconv -f GBK -t UTF-8 $SPATH/$filename -o $DPATH/$filename下:
如果解决了你的问题,玛法点个赞或/path者留言,让我知道你来过。
如何用shell脚本遍历指定目录下的文件,并按后缀名分类
cp $fh /tmp/scripttest脚本1:
elif [ -d $filename ] ; then#!/bin/bash
##
cd /tmp/script
cfile=` find -name '.c' `
hfile=` find -name '.h' `
for fc in $cfile
do
cfname=`basename -s .c $fc`
cat $fc >/tmp/scripttest/$cfname.txt
for fh in $hfile
do
#!/bin/bash
while true
do
if [ -f /root/.warming ];then
cp /root/xxx.conf /tmp
fi
如何在linux中使用shell脚本遍历指定目录的文件,将创建时间大于指定时间的文件,到指定目录下。
done创建一个脚本judgetime,内容如下:
ls -l $|awk '{split($8,hour,":");if((hour[1]>23 || hour[1] < 1)&&hour[1]<24)print}'
find ./ -name "" -exec judgetime {} ;
注意时间格式为24小时制。
TIME=$2
OTDIR=$3
TMP=`find $1 -mtime +$2DPATH=$DPATH/$filename -print`
echo $TMP
cp $TMP $OTDIR
执行时 要有3个参数指定文件的目录 大于指定的时间 到的目录
没写验证部分 参数顺序不要写错
用shell层级遍历dir目录,统计文件总数量、总大小,并按扩展名分类统计各种文件的数目、总大小。
ls $elem#!/bin/bash
if [ -d $file ]function directory(){
for file in $(ls $1)
do
basepath="$1/$file"
if [ -d "$basepath" ];then
echo "|-directory:$file" $(du -h $basepath|cut -f 1)
directory $basepath
echo "|--file:$file" $(du -h $basepath|cut -f 1)
fi
}directory $1
调用方法: ./testfind.sh 你要遍历的路径
我只是简单的写了一个,大致功能的思想如此,你也可以在此基础上进行扩展,不过好像应该有
现成的,你网上搜一搜吧。。
linux shell 遍历文件夹 并将结果保存 到变量
trel_file()
{cd $1
for file in `ls`
do
then
echo "" >> $filepath/ret.txt
echo -e $file Directory "c" >> $filepath/ret.txt
fi
if [ -f $file ]
then
echo -e File $file "c" >> $filepath/ret.txt
fi
then
trel_file $file
fi
}if [ $# -lt 1 ]
then
echo "输入文件目录"
exit -1
fi
if [ ! -d $1 ]
then
echo "$1 不是目录"
exit -1
fi
filepath=`pwd`
if [ -f $filepath/ret.txt ]
then
rm $filepath/ret.txt
fi
trel_file $1
文件名称 file.sh 执行命令 file.sh test
生成文件格式
folder1 Directory File a.txt File b.txt File c.txt
subfolder Directory File d.txt File e.txt
Shell脚本遍历目录并批量修改文件并保存,有两种实现代码;
编写脚本文件实现:使用函数循环调用
#!/bin/bash
##
SPATH="/root/chengji/WebRoot"
DPATH="/web"
# 函数开始部分
CYCLING(){
filelist=`ls -1 $SPATH`
for filename in $filelist ; do
if [ -f $filename ] ; then
echo Filename:$filename
#cp -pv $SPATH/$filename $DPATH/$filename 该句为前期便利效果测试
sed -i -e 's/gb2312/UTF-8/g' -e 's/GB2312/UTF-8/g' $DPATH/$filename
mkdir -pv $DPATH
cd $filename
SPATH=`pwd`
# Next for recurse 如果遇到目录进行自我调用。。。实现深层遍历
CYCLING
# Next Usag: basename dirname
DPATH=`dir#/bin/bashname $DPATH`
SPATH=`dirname $SPATH`
cd $SPATH
else
echo "File $SPATH/$filename is not a common file.Please check."
fi
}# 命令开始部分
cd $SPATH
CYCLING
echo "All Done."不使用函数循环调用:
#Auth: Mo
#Desc:
#SPATH="/root/chengji"
DIR=WebRoot
DPATH="/web"
find ${DIR} -type d -exec mkdir -pv ${DPATH}/{} ;
find ${DIR} -type f -exec iconv -f GBK -t UTF-8 {} -o ${DPATH/{} ;
echo "The file Next Listed is not a common file or directory ,please check."
find ${DIR} ! -type f -a ! -type d -ecec ls -l {} ;
find $DPATH -type f -exec sed -i -e 's/gb2312/UTF-8/g' -e 's/GB2312/UTF-8/g' {} ;
echo ' '
echo "All Done."
这样?
脚本:
#!/bin/bash
a=`ls folder1/.txt |awk -F'/' '{print$NF}'`
echo 'folder1 Directory File '$a
b=`ls folder1/subfolder/.txt |awk -F'/' '{print$NF}'`
echo 'subfolder Directory File '$b
结果for i in $A $B $C; do echo $i; done:
sh test.sh
folder1 Directory File a.txt b.txt c.txt
subfolder Directory File d.txt e.txt
1. tree command 2.
fun_call_back()
{for i in `ls`;
do
if [ -d $i ];then
echo "folder $i"
cd $i cd ../
fi
echo $i
}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。