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 循环读取文件时,需要确保文件具有适当的读权限,并且脚本具有执行权限。