shell 之for [转]

简介: 本文也即《Learning the bash Shell》3rd Edition的第五章Flow Control之读书笔记之二,但我们将不限于此。flow control是任何编程语言中很常用的部分,也包括了bash。

本文也即《Learning the bash Shell》3rd Edition的第五章Flow Control之读书笔记之二,但我们将不限于此。flow control是任何编程语言中很常用的部分,也包括了bash。在这里,我们将继续学习他们。

  和C不一样的是,在shell中是匹配list中的元素,因此非常适合用于命令的参数,文件列表。for格式如下:

for name  [in list ]
do
    statements that can use  $name...
done

  我们通过下面的例作进一步学习。一共设置了三个例子

# Test for the bash loop : for method
#
# Test 1: 显示$PATH中各个具体路径的详细信息

function getpath
{
    # 设置分割符号为“:”,缺省为空格
    IFS=:
    # for测试,其中ls -ld中的-d表示之显示目录的属性,不显示目录下属的文件。
    for dir in $PATH
    do
        ls -ld $dir
    done

}

# 通常$PATH中包含~/bin目录,一般不存在,在ls的显示中会报告错误,需要挑出进行处理。同时我们增加一个空的元素来进行分析。
function getpath1
{
    path=$PATH::
    echo check : $path
    IFS=:

    for dir in $path
    do
        # 如果是空元素,将其转换为当前目录。
        if [ -z $dir ] ; then    dir=. ; fi
        if ! [ -e $dir ]; then
            echo "$dir is not exist!"
        elif ! [ -d $dir ]; then
            echo "$dir is not a directory!"
        else
            ls -ld $dir
        fi
    done
}

#echo 'run getpath'
#getpath

echo 'run getpath1'
getpath1

# Test 2 显示指定文件的是否是有效文件名
function finfo
{
    if ! [ -e "$1" ]; then
        echo "$1 is not an availble file."
    else
        echo "$1 is a file."
    fi
}

echo 'run fileinfo'
# 如果命令没带参数,即list为空,则不执行for里面的代码
for filename in $@; do
    echo "in for loop..."
    finfo "$filename"
done

  下面是一个递归的例子,我们希望将目录下的文件也显示出来。根据层次结构,下一级比上一级向后挪一个tab。

# Test 3: 显示目录下的文件,采用递归方式 。showdirfile 表示显示所在目录的所有文件,如果也是目录,递归执行。为了记录方便,将注释加载命令行后面,注意这只是为了阅读方便,而不是shell应有的语法。
function showdirfile

      #step1 :只有是有效目录文件,才search   
      if [ -d $1 ] ; then 
        #step2 ,比上一级后退tab,记录前面tab的字符
        currenttab+="/t"
        #$(command <command>) 用于给出command的输出结果,作为字符串。
        #step 3 :搜索ls <dir_name>所显示的entry,如果是文件,显示,如果是字符串显示,并在后面加上"/",表明是目录,使用递归,检索该目录下的文件。

        for file in $(command ls $1); do
            echo -e -n ${currenttab}$file
            #step 4: 文件的含路径名字为$1/$file,由于我们没有采用cd $file,即没有进入该目录进行访问,因此要记录path,如果是目录,用dir记录下这个子目录的名字
            if [ -d $1/$file ]; then
                echo "/"
                showdirfile $1/$file
            else
                echo
            fi
        done
        #step2 ,执行完推出,恢复上一级的前面的tab字符串,即去掉最后的/t。
        currenttab=${currenttab%"/t"}
    # end of step 1
    fi
}
# 之前设置了IFS,会使得ls的输出不是以空格为分割,异常,需要重置它
unset IFS
echo 'run file architechture'
showdirfile ${1:-"~"}

目录
相关文章
|
Shell 数据安全/隐私保护 C语言
shell脚本-for循环语句详解
shell循环-for for循环默认跳过空行,遇到空行或者空格则不会去理睬 循环分为循环次数是固定的和循环次数不是固定的,固定的有for循环,不固定的有while和until循环 for循环每次都以空格进行分隔,例如 lisi 123,本应该让i变量取一整行,结果却把lisi,123分别赋给了变量,达不到我们预期的效果,即使使用awk命令也同样只会输出lisi,123,因为$2不存在,详细请看036视频中的28分处,可以修改IFS分隔符值,让for处理文件时按回车分隔
560 0
|
Shell Linux
LINUX SHELL中for用数组循环
LINUX SHELL中for用数组循环
110 0
|
Shell
shell脚本中,for的用法
shell脚本中,for的用法
114 0
|
Java Shell
shell之for循环
语法 image.png 第一种写法:利用for循环创建50个文件夹 image.png image.png 第二种java写法:利用for循环创建50个文件夹 image.
679 0
|
Shell
shell编程--流程控制for,do-while,if-then,break,continue,case等
2.5 流程控制 2.5.1 if语法 1、语法格式 if condition then     statements [elif condition     then statements. ..] [else     statements ] fi   2、示例 #!/bin/bash read -p "please input your name:" NAME      ###r
1391 0
|
Shell C++
shell浅谈之三for、while、until循环【转】
转自:http://blog.csdn.net/taiyang1987912/article/details/38929069 版权声明:本文为博主原创文章,未经博主允许不得转载。   目录(?)[-] 一简介 二详解 for循环 while循环 until循环 循环嵌套 循环控制符break和continue select结构 三总结   一、简介       Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for、while和until。
1130 0