shell 编写一程序,列出当前目录下指定文件的文件名,文件的首行为#!/bin/bash

如题所述

#!/bin/bash

for file in ./*
do
    if test -f $file
    then
        name=`basename $file`
        first_line=`sed '1!d' $file`
        if [ "$first_line" == "#!/bin/bash" ]
        then
            echo $name
        fi
    fi
done

我解释下代码,首先,在for循环中遍历当前目录下的所有文件,然后外层的if判断当前文件类型,如果是文件,则使用basename $file用来获取当前文件的文件名(包括拓展名)并赋值给变量name中,然后使用sed '1!d' $file获取文件第一行的内容并赋值给变量first_line,再在内层的if中判断第一行的内容是否是“#!\bin\bash”,如果是,则打印该文件的文件名。


ps:我也是刚学shell,写了半天才整出来,就当是自己也顺便练手了,哈哈。

我在我电脑上测试了下,没有问题,如果你还有问题请追问。

温馨提示:内容为网友见解,仅供参考
无其他回答

如何用shell脚本遍历指定目录下的文件,并按后缀名分类
脚本1:!\/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 done for fh in $hfile do cp $fh \/tmp\/scripttest done ...

为什么 shell 脚本的开头要写 #!\/bin\/bash
紧跟其后的 `\/bin\/bash` 是 Bash Shell 的二进制执行文件路径,Bash 是 Unix 和 Linux 系统中最常用的 Shell 程序之一。shebang 的核心作用是明确指定脚本的解释器。当一个脚本以 #!\/bin\/bash 开头,系统知道应使用 `\/bin\/bash` 来解析和执行这个脚本,确保程序按照预期运行。她bang 的写法可以根...

shell脚本第一行为“#!\/bin\/sh”,是什么意思?
在shell脚本的开头,第一行通常写有"#!\/bin\/sh",这是一项重要的指令。这一行告诉操作系统,此脚本应该使用\/bin\/sh这个可执行文件作为解释器来执行。与之类似,如果你的脚本使用bash或ksh,那么第一行应相应地改为#!\/bin\/bash或#!\/bin\/ksh。如果你使用自定义的脚本语言,比如xshell,需要将其解释...

编写满足下列要求的Shell脚本文件,并说明运行该脚本文件的方法(9分...
1)检查当前目录,并将当前目录更改为用户目录;currentpath=`pwd`usermod -d ${currentpath} 2)在当前目录下创建名为sun和smith的子目录, 在sun子目录中创建新的子目录2010-10-10;mkdir sum smith mkdir -p sun\/2010-10-10 3)将\/etc目录下扩展名为.conf的文件拷贝到sun子目录中;cp -R \/etc...

如何运行shell命令?第一行为什么是# !\/bin\/sh?
执行shell程序的方法有三种:1、sh shell程序文件名 这种方法的命令格式为:bash shell程序文件名这实际上是调用一个新的bash命令解释程序,而把shell程序文件名作为参数传递给它。新启动的shell将去读指定的文件,执行文件中列出的命令,当所有的命令都执行完结束。该方法的优点是可以利用shell调试功能。2...

...编写shell脚本,统计当前目录下的文件数目。 编
!\/bin\/bash compile () { local param1="$1"local param2="$2"if [ "$param1" -ge "$param2" ];then echo "param1 >= param2"fi } [ "$#" -eq 2 ] && { compile } || { echo "please input two param!"} !\/bin\/bash num=$(ls | wc -d)echo "${num}"...

shell 判断目录下是否有某文件
!\/bin\/bash if [ ! -f "$1" ];then echo "当前目录不存在文件: $1"else echo "当前目录存在文件: $1"fi 运行方法: .\/test.sh filename (test.sh为脚本名称,filename为文件名称)查找目录为当前目录;

如何用shell获取linux目录下的文件名
获取所有常规文件的文件名并打印出来的脚本listfile.sh如下 !\/bin\/bash dir="\/*"dir=$1$dir for f in $dir do if [ -f $f ]then echo $f fi done 使用方法:listfile.sh PATH 原理:PATH参数是路径,将路径后加上“\/*”,代表该目录下的所有文件和目录名,利用for循环比较每个文件是否是...

编写一个Shell script程序, 从txt文档提取用户名,生日,年级,来创建...
\/bin\/bash#添加用户组groupadd YR1 2>> \/var\/log\/groupadd.loggroupadd YR2 2>> \/var\/log\/groupadd.log#添加用户declare -l user_nameN=1000M=2000while read line;doyear=`echo $line | awk '{ print $NF }'`user_name=`echo $line | awk -F',' '{ print substr($1,1,1)$2}'...

shell下怎么循环获取某目录下的文件名,放入变量并循环打印变量? 万分...
!\/bin\/bash path=$1 #这里的$1,换成你需要的路径名,或者你不换,通过shell的参数传入 cd $path for filename in `ls`do echo $filename done

相似回答