(遍历某个目录下所有文件,并执行相关命令)记录下自己写的linux shell脚本

更新个错误的地方

if else 的判断要用 [] 而不是用 () !!!!!!

一、脚本功能简述:

得到用户输入的 目录名称 语言类型,遍历该目录下的所有文件,并执行相关命令
#初始化参数选项
export ready_fold_name=''
export language_type=1
#得到用户输入的参数值
read -p "请输入目录名称(如 multifold ):" ready_fold_name
read -p "请选择生成的语言(如 中文:1,英文:0 ):" language_type
echo "这是你输入的目录名称:$ready_fold_name"

#准备拼接读取文件名称字符
export curpath=${PWD}
echo ${ready_fold_name}
echo "上面是预操作的目录"
ljfiles_list=$(ls ./${ready_fold_name}/ )

#当前语言设置 1:中文  0:英文
export curlangue=""
if($language_type==1)
then
  curlangue="./xunfei_config_zh.json"
  echo "你当前选用的是=>中文<=输出"
else
  curlangue="./xunfei_config_eng.json"
  echo "你当前选用的是=>英文<=输出"
fi

#遍历每个文件,并执行命令
for file in $ljfiles_list
  do
    echo "当前文件名称如下:"
    echo $file
    echo "开始生成=>$file <=视频的字幕文件:"
    eval " autosub -sapi xfyun -i ./${ready_fold_name}/${file}  -sconf $curlangue "
  done

二、使用截图:

在这里插入图片描述
在这里插入图片描述

三、学到的知识

1.变量定义:

变量定义,有一个普通的定义,还有个 export声明的定义,听说export定义的变量可以在当前环境中一直存在,类似全局变量。而普通的定义当终端关闭了就不存在了。类似私有变量。

2.命令 输入得到其返回值

变量=$( 命令 【参数】 )

如:

ljfiles_list=$(ls ./${ready_fold_name}/ )

下面这个也是一种,搞不懂为什么PWD要大写才可以。总之以第一种为准。

export curpath=${PWD}

3.脚本文件中执行 命令 写法

使用 eval
如:

eval " autosub -sapi xfyun -i ./${ready_fold_name}/${file}  -sconf $curlangue "

4.关于变量使用

前面声明的变量(私有,全局都是一样的)是这样的

变量名= ...

ljfiles_list= ...

那么使用它就是 $ljfiles_list
如:

for file in $ljfiles_list
...

5.关于变量与变量,变量与字符串, 之间拼接

1.变量与变量 使用 ${变量名}

如:

${ready_fold_name}${ready_fold_name2}
2.变量与字符串 使用 [string]${变量名}[string]

这里【string】表示某个字符串,如果拼接在变量前面就是

[string]${变量名}

./${ready_fold_name}

另一个就不说了。一样的,无非是谁前谁后

6.if else我接触到的

if (【判断条件】)
then
  【为逻辑真的主体】
else
  【为逻辑假的主体】
fi

嗯就是这样,全剧终(应届毕业生,有哪位哥哥,姐姐公司招人的呀。普通本科学校毕业的,找工作好难)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 shell 中遍目录下的所有文件可以使用 `for` 命令。例如,如果要遍当前目录下的所有文件,可以使用以下命令: ``` for file in * do echo "$file" done ``` 这会在遍每个文件时打印文件名。您还可以使用 `find` 命令来遍目录下的所有文件。例如,要遍 `/home/user/documents` 目录下的所有文件,可以使用以下命令: ``` find /home/user/documents -type f ``` 这会列出 `/home/user/documents` 目录下所有文件的路径。您还可以使用 `find` 命令执行特定操作,例如删除或复制文件。 ``` find /home/user/documents -type f -exec rm {} \; find /home/user/documents -type f -exec cp {} /new/location \; ``` 在第一个例子中,`find` 命令会在找到每个文件执行 `rm` 命令,并使用 `{}` 占位符表示文件的路径。在第二个例子中,`find` 命令会在找到每个文件执行 `cp` 命令,将文件复制到新的位置。 希望这些信息对您有帮助。 ### 回答2: 在Shell编程中,可以使用`find`命令来遍目录下的所有文件。下面是一个示例的Shell脚本,可以使用`find`命令来遍目录下的所有文件并输出文件名: ```bash #!/bin/bash # 定义目标目录 target_dir="/path/to/directory" # 使用find命令目录下的所有文件,并输出文件名 find "$target_dir" -type f | while read -r file do echo "$file" done ``` 在这个示例中,首先通过修改`target_dir`变量来指定目标目录路径。然后使用`find`命令来遍目录下的所有文件(`-type f`表示只匹配普通文件),并将结果通过管道传递给`while`循环。`while`循环读取每个文件路径,并通过`echo`命令输出文件名。 需要注意的是,以上脚本是在Unix/Linux系统下使用的Bash Shell脚本。如果是在Windows系统下,可以使用类似的脚本,但需要使用Windows中的命令行工具,例如PowerShell或者使用`dir /s /b`命令来替代`find`命令。 希望以上解答能够帮助到您! ### 回答3: 在shell脚本中,我们可以使用循环结构和通配符来遍目录下的所有文件。 一种常用的方法是使用for循环和通配符: ```shell #!/bin/bash # 设置目标目录 dir="/path/to/directory" #遍目录下的所有文件 for file in $dir/*; do if [ -f "$file" ]; then echo "$file" fi done ``` 在上面的示例中,我们通过`$dir/*`使用通配符`*`来匹配目录下的所有文件,并将每个文件的路径存储在变量`file`中。然后,我们使用`-f`选项检查`$file`是否为一个文件,如果是,则打印该文件的路径。 另一种方法是使用find命令: ```shell #!/bin/bash # 设置目标目录 dir="/path/to/directory" #使用find命令目录下的所有文件 find "$dir" -type f ``` 在上面的示例中,我们使用`find "$dir" -type f`命令来递归地查找目录`$dir`下的所有文件,并打印它们的路径。 无论使用哪种方法,都可以遍目录下的所有文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值