找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 44864|回复: 17

[问题求助] Shell问题请教,参数如何传递

[复制链接]
发表于 2019-6-24 10:53:11 | 显示全部楼层 |阅读模式
自己写了一半,后续不知道怎么写?

#!/bin/bash
for FILE in *.扩展名;
    do
        命令 "$FILE" 命令参数逐行存在文本里面,需要逐行传递参数
    done

请给予指点,谢谢。
发表于 2019-6-24 15:46:53 | 显示全部楼层
本帖最后由 cfwyy77_bat 于 2019-6-24 16:08 编辑

下面是按行打印的例子,不知是不是你想要的意思。

  1. #!/bin/bash
  2. #按行分割
  3. IFS=$'\n'
  4. for line in `cat file.txt`
  5. do
  6.     echo $line
  7. done
复制代码
或者 用while +重定向

  1. #!/bin/bash
  2. while read line
  3. do
  4.    echo $line
  5. done < file.txt
复制代码
 楼主| 发表于 2019-6-24 17:29:17 | 显示全部楼层
回复 2# cfwyy77_bat

多谢,我去试试看。
 楼主| 发表于 2019-6-24 17:59:36 | 显示全部楼层
本帖最后由 netdzb 于 2019-6-24 18:01 编辑

回复 2# cfwyy77_bat

假设文本的book.txt存放的是码率信息,

1000k
2000k
3000k
4000k
5000k

目录下有5个视频文件。

如何通过文本把码率参数传进去,用ffmpeg进行转码呢?
发表于 2019-6-25 08:31:12 | 显示全部楼层
回复 4# netdzb


看看还需要加什么参数:
  1. #!/bin/bash
  2. paste <(ls *.mp3) book.txt | while read LINE; do
  3.     echo ffmpeg $LINE
  4. done
复制代码
发表于 2019-6-25 09:44:23 | 显示全部楼层
回复 4# netdzb
每个视频文件都要转成book.txt中的各种码率?还是说一个文件对应每行的一种码率?
 楼主| 发表于 2019-6-25 09:56:44 | 显示全部楼层
回复 6# cfwyy77_bat

book.txt第一行对应第一个视频的码率,第二行对应第二个,依次类推。

下面的脚本有问题,跑不通,帮忙看看。

#!/bin/bash
for FILE in *.mp4;
do
  ffmpeg -i $FILE -c:v libx264 -c:a copy -b:v  paste < book.txt | while read LINE $FILE.*-.mp4
                ~~~~~                                                                                                ~~~~~~~~~~
                输入                                                                                                       输出
done
发表于 2019-6-25 10:30:42 | 显示全部楼层
回复 7# netdzb
  1. #!/bin/bash
  2. paste <(ls *.mp3) book.txt | while read LINE; do
  3.     ffmpeg -i $LINE -c:v libx264 -c:a copy -b:v
  4. done
复制代码
 楼主| 发表于 2019-6-25 10:46:15 | 显示全部楼层
回复 8# Batcher

跑不通,不知道错在哪里。已经换到unix格式了。


$ bash shi.sh
shi.sh: line 5: syntax error near unexpected token `done'
shi.sh: line 5: `done'

Administrator@USER-20151226SM /i/jiemi
发表于 2019-6-25 10:56:06 | 显示全部楼层
回复 7# netdzb


你写的那个让人看不懂。

可以试试这个,ffmpeg的参数的写法自己看,我没怎么用过ffmpeg.

  1. #!/bin/bash
  2. file=(`ls *.mp4`)
  3. bitRate=(`cat book.txt`)
  4. for i in `seq 0 1 4`
  5. do
  6.    ffmpeg -i ${file[$i]} -c:v libx264 -c:a copy -b:v ${bitRate[$i]}  ${bitRate[$i]}-${file[$i]}
  7. done
复制代码
 楼主| 发表于 2019-6-25 11:03:37 | 显示全部楼层
回复 10# cfwyy77_bat

我的shell好像坏了,居然不认识done。下面的代码会跑不通的,奇怪了。

#!/bin/bash
while read LINE
do
    echo $LINE
done < book.txt
发表于 2019-6-25 11:09:12 | 显示全部楼层
回复 11# netdzb
写法应该没问题,换行符格式对不对?
 楼主| 发表于 2019-6-25 11:13:32 | 显示全部楼层
回复 12# cfwyy77_bat

是换行符的问题,搞定了。
可惜显示的book.txt缺少最后一行,也不知道问题出在哪里?
 楼主| 发表于 2019-6-25 12:14:16 | 显示全部楼层
回复 8# Batcher

脚本跑不通,是不是我的shell有问题啊?

控制台直接输入下面
paste < ls    // 命令报错
ls | paste     // 可以通过

上面的2条命令都合法吗?还是第1条命令不合法,第2条命令合法。
发表于 2019-6-25 12:20:50 | 显示全部楼层
回复 14# netdzb
  1. paste <(ls *.mp3) book.txt
复制代码
执行这个命令把完整的报错信息发出来看看
另外你用的什么操作系统呢,RHEL? CentOS? Ubuntu? AIX? Solaris? 具体是哪个版本呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:35 , Processed in 0.022195 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表