在 shell 脚本中使用 CLI 命令

在 shell 脚本中使用 CLI 命令

我有这段代码,它可以在普通 CLI 中执行,但如何将其应用到文件中?

sort <filename> | uniq | cut -f 1 -d "," | uniq -c |sed -e "s/^[ \t]*//"

它总是告诉我类似命令未找到之类的信息。

编辑:我的命令在 CLI 中工作,但我想将其应用到 bash 脚本中。现在我的问题是如何在脚本中应用此命令,但文件名 $1 ,然后将输出保存在另一个变量中,该变量可以像文件一样逐行读取或类似。

所以我尝试使用这段bash代码和“./script.sh filename.txt”

#!/bin/bash

lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'

它在执行时向我显示此错误:

./filename.txt: line 1: YKL112W,YKL112W: command not found

答案1

问题是您的脚本中有语法错误。线路

lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'

方法:

  • 将字符串分配sort给变量lines
  • 然后,执行存储在变量中的命令,$1同时将输出分别通过管道传输到uniqcut和。uniqsed

由于$1- 您提供给脚本的参数 - 包含文件名,因此 shell 会尝试执行该文件(例如,就好像它是脚本一样),即使它只是一个文本文件;因此出现错误消息。

如果要将命令的结果赋给变量line,则需要执行“命令替换”,如下所示

lines="$(sort "$1" | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//')"

我还建议使用外壳检查识别 shell 脚本的问题。

相关内容