使用 Bash 运行脚本

使用 Bash 运行脚本

我有一个来自《命令行数据科学》一书的脚本,Jeroen Janssens 是这样

curl -s http://www.gutenberg.org/cache/epub/76/pg76.txt |
 tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort |
 uniq -c | sort -nr | head -n 10

并将其保存为top-world-1.sh

在 Ubuntu 15.10 64bit 的终端上,我输入了一个命令 ./top-words-1.sh,得到了如下输出

./top-words-1.sh: line 1: $'\r': command not found
./top-words-1.sh: line 2: $'\r': command not found

我立刻猜想这是由多行引起的,于是我删除了 '\n' 个位置,这样就得到了这样的句子

curl -s http://www.gutenberg.org/cache/epub/76/pg76.txt |tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort |uniq -c | sort -nr | head -n 10

但我得到了

: invalid number of lines

我对编程 Bash 脚本完全陌生。您能给我一些建议吗?提前谢谢

根据以下评论,我有:

  • 检查权限

在此处输入图片描述

  • 添加到#!/bin/bash文件顶部并得到输出bash: ./top-words-1.sh: /bin/bash^M: bad interpreter: No such file or directory
  • 使用 sudo 运行

答案1

它对我有用。尝试:

cat > script.sh <<EOF
#! /bin/bash
 curl -s http://www.gutenberg.org/cache/epub/76/pg76.txt |tr '[:upper:]' '[:lower:]' | grep -oE '\w+' | sort |uniq -c | sort -nr | head -n 10
EOF
 chmod +x script.sh
 ./script.sh

它给了我正确的答案。请确保您没有向文件添加任何额外的(隐藏)字符。您还可以将命令复制/粘贴到 shell 中,以确保它适合您。

答案2

使用以下命令运行脚本:bash ./scriptname,或者chmod +x script然后:./scriptname

未找到命令可能意味着它不可执行。

答案3

我使用dos2unix命令解决了我的问题。感谢@muru 的评论。原因由@steeldriver 解释。

相关内容