如何为终端命令创建脚本文件?


114

在Windows中,我可以写含有CMD(通常命令的文件.cmd.bat文件)。当我单击这些文件时,它将打开cmd.exe并运行文件中包含的命令。

我将如何在Ubuntu中做到这一点?

我确定这是重复的,但找不到答案。
它与以下问题类似,但未回答以下问题:

将常用的终端命令存储在文件中

Ubuntu中的CMD.exe模拟器可运行.cmd / .bat文件

Answers:


149

有两种方法。

首先,最常见的是写一个文件,确保第一行是

#!/bin/bash

然后保存文件。接下来将其标记为可执行文件chmod +x file

然后,当您单击(或从终端运行文件)时,将执行命令。按照惯例,这些文件通常没有扩展名,但是您可以使它们以.sh其他方式结束。

一些注意事项:

  • 只要第一行是应该解释文件的程序的路径,任何文件(我指的是任何文件)都可以在Linux中执行。常见的例子包括/bin/python/bin/sh/bin/dash,但偶奇球的东西像工作/bin/mysql
  • Bash是一门完整的语言。它比Windows中的cmd.exe复杂得多。它具有强大的编程语言,支持函数,循环,条件,字符串操作等。
  • 如果遇到问题,这些文档可能会有所帮助。
  • 如果您不想使该文件成为可执行文件,则可以通过将其作为参数传递给bash来运行它: bash file/to/run.sh

一个简单的Bash示例

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

第二种方法是使用记录命令script。运行,script然后做一些事情。完成工作后,类型exit和脚本将为您生成一个文件,其中包含您所做的所有“工作”。这种用法较少,但在制作宏之类的东西时效果很好。man script有关更多信息。


您可能想将其更改/bin/bash/bin/sh,bash甚至不是Ubuntu的默认设置。
TC1 2012年

@ TC1默认情况下已安装,因此它是否为默认值都无关紧要。
卡洛斯·坎德罗斯

1
我想指出的是/bin/dash/bin/sh通常与之链接)比bash快很多(我测量的速度大约快15倍)。如果有可能,请使用/bin/dashshell脚本:)
MiJyn 2014年

4
如果您与文件位于同一文件夹中,请确保./file.sh
coteyr

1
我尝试了这两种方法,但是如果我尝试双击bash脚本文件,它将仅在geany / gedit中打开文本文件,准备进行编辑。我希望双击后执行脚本。这个问题包含我想要做什么的更多细节。
thymaro '18

15

您的意思是使用Shell脚本写入文件?以下是几种方法:

touch file

此方法将仅创建一个文件,但是如果该文件已存在,则仅将修改日期更改为使用该命令的时间。

echo "text" > file

该方法将覆盖的内容filetext。如果您想清除文件,只需执行以下操作:

echo "" > file

假设您要向其中写入多行,并且不想使用数千个echo命令,则可以使用以下命令:

cat << EOF > file
test
test1
foo
bar
EOF

这样一来,您就可以在一条命令中写多行。然后的内容file是这样的:

test
test1
foo
bar

如果要附加到文件,请替换>>>

希望这可以帮助!


编辑:哦,我知道了,所以您将使用.sh扩展名(可选,但这是个好主意)在gedit中写入文件,然后在文件管理器上,右键单击该文件,选择“属性”->“权限”,然后检查Allow executing file as program。然后,您可以双击它,它将运行:)。另外,如果要在终端中执行此操作,则可以运行以下命令以使其可执行(sudo如果不属于您,则可能需要添加前缀):

chmod +x file

并运行:

./file

实际上,我要执行的操作是在文件gedit中写入一个包含终端命令的文件。然后,当我双击该文件时,它将在终端中运行这些命令。
赛斯

好的答案,体贴的更新。为了简单地创建文件,我一直只是使用touch filename
TryTryAgain 2012年

@TryTryAgain,是的,这是一种简单的方法,可能比更快echo "" > file。如果我在回答中包含该方法,可以吗?
MiJyn 2012年

@MiJyn绝对包括它,随意。谢谢
TryTryAgain 2012年

我怎样才能使其像全局命令一样在终端中的任何位置运行?
Omer

14

与Windows批处理文件等效的是shell脚本,而Bash Scripting是一个很好的入门指南。

在大多数情况下,可以在命令行中输入的命令可以放置在Shell脚本中。

与Windows批处理文件不同的几件事:

  • 有不同的命令解释器,称为外壳程序。默认值为bash,但是如果您感兴趣的话,还有其他一些,例如zsh,ksh,破折号,perl,python等。

  • 要运行Shell脚本,您需要使文件可执行,您可以使用 chmod +x <filename>

  • 在Ubuntu中,当前目录不是程序搜索路径,因此您需要运行./<filename>,而不是<filename>

  • 变量名是$<varname>,不是%<varname>%

  • 默认情况下,不像批处理文件一样打印Shell脚本中的命令。

  • 文件名的扩展名可以是.sh或(更常见),您不需要使用扩展名。放在#!/bin/bash文件的第一行,它告诉Ubuntu使用什么程序来运行文件。

  • 评论以开头#,而不是rem

希望这对您有所帮助,并提供有趣的脚本!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.