正在加载

shell脚本读取文件名(shell脚本判断文件名包含某个字符)

  • 作者: 张婉若
  • 来源: 投稿
  • 2024-07-24


1、shell脚本读取文件名

Shell 脚本读取文件名

在编写 Shell 脚本时,经常需要读取文件系统中的文件名。Shell 提供了多种方法来实现这一功能。

globstar ()

globstar 运算符 () 在指定的目录及其子目录中匹配所有文件。例如:

for file in /.txt

do

echo $file

done

这将输出当前目录及其所有子目录中的所有以 .txt 结尾的文件名。

find

find 命令用于在文件系统中搜索文件。它可以根据各种条件过滤结果,包括文件类型、时间戳和名称模式。例如:

```

find /usr/bin -name "ls"

```

这将在 /usr/bin 目录中查找所有以 "ls" 开头的文件名。

ls

ls 命令列出当前目录中的文件和目录。可以结合使用参数来过滤结果,例如 -r(按名称排序)或 -S(按大小排序)。例如:

```

ls -r .png

```

这将按名称倒序列出当前目录中的所有 .png 文件。

read

read 命令从标准输入读取文本。可以将其与 find 或 ls 命令结合使用,将文件名作为输入传递给脚本。例如:

```

find /usr/bin -name "ls" | read filename

```

这将将 /usr/bin 目录中所有以 "ls" 开头的第一个文件名存储在 $filename 变量中。

通过使用这些方法,Shell 脚本可以轻松地读取文件系统中的文件名,从而实现各种文件处理操作。

2、shell脚本判断文件名包含某个字符

Shell 脚本判断文件名包含某个字符

在 Shell 脚本中,判断文件名是否包含某个字符是一个常见的任务。这可以通过使用 bash 中内置的 `[[ ]]` 测试操作符来实现。

语法如下:

```shell

[[ $filename == CHAR ]]

```

其中:

`$filename` 是要检查的文件名

`` 是通配符,表示匹配任意字符序列

`CHAR` 是要查找的字符

例如,要判断文件名 `test.txt` 是否包含字母 "t",可以运行以下命令:

```shell

[[ test.txt == t ]]

if [[ $? == 0 ]]; then

echo "test.txt 包含字母 t"

else

echo "test.txt 不包含字母 t"

fi

```

如果 `test.txt` 包含字母 "t",则输出 "test.txt 包含字母 t";否则,输出 "test.txt 不包含字母 t"。

除了 `==` 运算符,还可以使用其他运算符来判断文件名是否包含某个字符:

`!=`:不等于

`=~`:正则表达式匹配

`!=~`:正则表达式不匹配

例如,要使用正则表达式判断文件名 `test.txt` 是否以 "te" 开头,可以运行以下命令:

```shell

[[ test.txt =~ ^te ]]

if [[ $? == 0 ]]; then

echo "test.txt 以 te 开头"

else

echo "test.txt 不以 te 开头"

fi

```

3、shell脚本读取excel文件

Shell脚本读取Excel文件

在日常自动化任务中,经常需要从Excel文件中提取和处理数据。使用Shell脚本可以方便地实现此目的。

步骤:

1. 安装所需库:

使用以下命令安装`xlrd`库:

```

sudo apt-get install python3-xlrd

```

2. 导入库:

在Shell脚本中导入`xlrd`库:

```

import xlrd

```

3. 打开Excel文件:

使用`open_workbook()`函数打开Excel文件:

```

workbook = xlrd.open_workbook('data.xlsx')

```

4. 获取工作表:

获取特定工作表,通常是索引为0的第一张工作表:

```

worksheet = workbook.sheet_by_index(0)

```

5. 读取数据:

使用`cell()`函数读取工作表中的单元格数据:

```

value = worksheet.cell(row, col).value

```

其中`row`和`col`是单元格的行号和列号。

示例脚本:

```

!/bin/bash

import xlrd

workbook = xlrd.open_workbook('data.xlsx')

worksheet = workbook.sheet_by_index(0)

for row in range(worksheet.nrows):

for col in range(worksheet.ncols):

value = worksheet.cell(row, col).value

echo "$value"

```

注意:

`xlrd`库仅支持读取Excel文件,不能写入。

单元格值可以是数字、字符串或日期等不同类型。

4、shell脚本for循环读取文件

在 shell 脚本中,使用 for 循环可以遍历文件中的行。具体步骤如下:

1. 打开文件:使用 open() 函数打开需要读取的文件。可以指定文件的读写模式,如 "r" 表示只读。

2. 遍历文件:使用 for 循环遍历文件的每一行。循环变量通常命名为 "line"。

3. 读取行:在循环中,使用 read() 函数读取文件中的当前行。如果文件中没有更多行,read() 函数将返回 false。

4. 处理行:在循环体内,可以对读取到的行进行处理,例如打印、存储或对行中的字段进行解析。

5. 关闭文件:遍历完文件后,需要关闭文件以释放资源。使用 close() 函数关闭文件。

以下是一个示例脚本,演示如何使用 for 循环读取文件:

```shell

!/bin/bash

打开文件

file=sample.txt

exec 3<$file

遍历文件

while read -u3 line; do

处理行,例如打印

echo $line

done

关闭文件

exec 3>&-

```

需要注意的是,在使用 for 循环读取文件时,需要确保文件具有适当的读权限,并且脚本具有执行权限。