659得票10回答
为什么使用“#!/usr/bin/env NAME”而不是“#!/path/to/NAME”作为我的shebang更好呢?

我注意到一些从他人那里获取的脚本具有shebang #!/path/to/NAME,而其他使用相同工具(NAME)的脚本则具有shebang #!/usr/bin/env NAME。 两者似乎都能正常工作。在教程中(例如Python),似乎有一种建议认为后者更好。但是,我不太明白为什么会这样...

651得票4回答
在脚本中使用"${a:-b}"进行变量赋值

我一直在看一些其他人写的脚本(特别是 Red Hat),他们很多变量都是使用以下表示法赋值: VARIABLE1="${VARIABLE1:-some_val}" 或者扩展其他变量: VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}" 使用这种表示法而不是...

546得票4回答
在一个bash脚本中,使用条件语句"或"在一个"if"语句中。

这个问题是我之前的问题的续集。这个网站上的用户很友好地帮助我确定如何编写一个遍历字符串值的bash for循环。例如,假设一个循环控制变量fname遍历字符串"a.txt" "b.txt" "c.txt"。当fname的值为"a.txt"或"c.txt"时,我想要echo出"yes!",否则e...

535得票8回答
如何将命令行参数传递到Shell脚本中?

我知道shell脚本只是像在命令提示符下执行命令一样运行。我想要能够像运行函数一样运行shell脚本...也就是说,将输入值或字符串传递给脚本。我该如何处理这个问题?

448得票2回答
使用 'sed' 查找和替换

我知道这个问题可能以前已经有人回答过了。我在各种地方看到过很多关于这个问题的帖子,但是对我来说,通常很难提取出答案。我正在寻求一个关于“sed”命令使用示例的帮助。 假设我想要对文件"hello.txt"(与提示符处于同一目录中)进行操作。任何包含短语"few"的地方都应该改为"asd"。这...

429得票16回答
在Bash中,何时使用别名(alias),何时编写脚本(script),何时编写函数(function)?

没有人应该像我一样花费10年来问这个问题。如果我刚开始使用Linux,我想知道:何时使用别名,何时编写脚本,何时编写函数? 对于别名,我只在执行不带参数的非常简单的操作时使用别名。 alias houston='cd /home/username/.scripts/' 那看起来很明显。...

426得票18回答
如何批量更改文件的扩展名?

我想将文件扩展名从*.txt更改为*.text。 我尝试使用basename命令,但我无法更改多个文件。 这是我的代码: files=`ls -1 *.txt` for x in $files do mv $x "`basename $files .txt`.text" done...

404得票4回答
在使用sh脚本中的sed命令时,需要转义哪些字符呢?

以下是脚本内容: #!/bin/sh sed 's/(127\.0\.1\.1)\s/\1/' [some file] 如果我尝试在sh(这里是dash)中运行此命令,由于括号需要转义,所以会失败。但是我不需要转义反斜杠本身(在八位字节之间或者在\s或\1中)。这里的规则是什么?当我需要...

372得票6回答
为什么我的Shell脚本在空格或其他特殊字符上出现问题?

...或者是关于在Shell脚本中处理文件名和其他字符串传递的入门指南。 我编写了一个大部分时间都工作正常的Shell脚本。但是在某些输入(例如某些文件名)上会出错。 我遇到了以下问题: 我有一个包含空格的文件名 hello world,它被当作两个单独的文件 hello 和 world。 ...

368得票21回答
如何从每行输出中删除前导和尾随的空格?

我想从输出中删除每行开头和结尾的所有空格和制表符。 有没有像 trim 这样简单的工具,可以将我的输出传递给它? 示例文件: test space at back test space at front TAB at end TAB at front sequence o...