如何在 Ubuntu 终端中编写 shell 脚本?

如何在 Ubuntu 终端中编写 shell 脚本?

现在我不知道这是否就是它的名字,所以请原谅我的糟糕用语,如果我错了请纠正我,但我正在寻找一种方法来缩短这段代码:

gcc -o hello hello.m \

-I `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` \

-L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
-lgnustep-base -fconstant-string-class=NSConstantString \

-D_NATIVE_OBJC_EXCEPTIONS

现在澄清一下,此代码允许我执行或构建/运行我构建的 Objective-C 程序。我花了一段时间才找到它,因为我以前在 Ubuntu 中编译 Objective-C 时遇到错误,但此代码有效。现在,如果绝对有必要,我不介意每次都输入它,但我觉得有一种更简单的方法。

那么,我是否可以将其推送到文本文件中,并将其保存为 gcc 执行或类似内容,然后只需输入一行即可:

./gcc execute

运行它然后./-name只需obj-c文件

它会运行我的程序吗?

现在我并不是在寻找那种形式的方法,它只是一个例子,有没有办法做类似的事情?

这会让事情变得更加方便,任何帮助都会受到赞赏!

答案1

回答部分问题:

首先,我使用“myDemoScript”而不是“gcc”,因为当您稍后从同名脚本调用 gnu c 编译器(GCC)时会产生混淆。


1)首先,不检查文件名的基本方法:

vim myDemoScript    
i (insert mode on)
#!/usr/bin/env bash
gcc -o hello hello.m  etc etc etc
ESC :wq

chmod +x myDemoScript (使脚本可执行)。
之后,您只需使用 ./myscript 即可。


2)如果您使用 bash(或类似的 shell),则可以使用 $0、$1。

$0 将包含程序的名称(例如,在我的情况下为“myDemoScript”。)
$1 将包含第一个参数。

因此,如果你调用“./myDemoScript hello”,那么脚本中的 $1 将包含“hello”

#$/usr/bin/env bash
echo started the script $0 with $# arguments
echo going to work on the file $1
echo compiling $1.c to produce the output file $1
gcc -o $1 $1.c

(有关详细信息,请谷歌搜索“bash getopts”)


3)回答我将如何做:

对于编译作业:使用制作

Make 对于将单个 c 文件编译为可执行文件来说有点过头了,但它是一个很好的学习工具,你可以用它做很多事情。如果你的项目包含多个文件,它也非常有用。特别是在文件很多或文件编译时间很长的情况下。

vim Makefile
i (insert mode on)

hello: 
<TAB> gcc -o hello hello.m -I `gnustep-config \
       --variable=GNUSTEP_SYSTEM_HEADERS` \
      -L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
      -lgnustep-base -fconstant-string-class=NSConstantString \
      -D_NATIVE_OBJC_EXCEPTIONS

debug_hello: 
<TAB> gcc -g -o hello hello.m -I `gnustep-config  \
      --variable=GNUSTEP_SYSTEM_HEADERS` \
      -L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
      -lgnustep-base -fconstant-string-class=NSConstantString \
      -D_NATIVE_OBJC_EXCEPTIONS

clean:
<TAB> rm hello

ESC :wq (write and quit)

将此文件放在同一文件夹中,您只需发出“make hello”即可。
然后,Make 将在Makefile
它将首先检查是否需要构建任何依赖项(示例中未使用任何依赖项),然后执行编译命令。

我添加了标签*debug_hello* 来演示其他选项:例如,通过-g向 gcc 添加标志来构建同一程序的调试版本。

干净的是另一个很好的例子。部分原因是它展示了非 GCC 功能。部分原因是当你的项目增长到包含数十个文件时,有一种方法可以清理一些东西,这非常好。


Make 可以做的远不止我刚才展示的这些,但这有点偏离主题了。如果你感兴趣的话,我建议你去谷歌搜索一下。

相关内容