编写第一个 shell 脚本

编写第一个 shell 脚本

出师 Linux 脚本

创建脚本文件

在创建脚本文件时,必须在文件的第一行指定要使用的 shell,比如说我要使用 bash,可以先在终端中使用 which bash 查询 bash 的位置:

/usr/local/bin/bash

然后用这个位置在脚本文件中指定使用的 shell:

#!/usr/local/bin/bash

注意前面的 #! 符号。通常在 shell 脚本中,# 用作注释行,shell 不会处理脚本中的注释行。但是,这里的第一行是个例外,# 后面的感叹号会告知 shell 使用哪个 shell 程序来运行脚本。

指定了 shell 之后,就可以在文件中的每一行输入命令,然后加一个回车符,当然,可以通过 # 添加注释信息:

#!/usr/local/bin/bash
# This script displays the date and who's logged on
echo -n "The time and date are: "
date
echo "Let's see who's logged into the system:"
who

上面就是我们创建的第一个脚本的所有内容了。可以根据需要将两个命令放在同一行,用分号隔开。shell 会按照命令在文件中出现的顺序处理。将这个文件保存在名为 test 的文件中,可以不指定后缀名。

修改权限

运行脚本文件时需要指定脚本的位置,可以将 shell 文件所处的目录添加到 PATH 环境变量中,也可以在终端中使用绝对或相对文件路径引用脚本文件。例如这里,test 文件就位于当前目录下,可以这样运行它:

./test

-bash: ./test: Permission denied

但是,shell 虽然找到了 test 脚本文件,却提示没有权限执行。

在创建 test 文件时,umask(详见Linux 文件权限)决定了文件的默认权限:

ls -l test
-rw-r--r--@ 1 franklin  staff  163 Nov  2 11:14 test

新建的 test 属主仅有读写权限,通过 chmod 增加执行权限(x)才能运行 test 脚本:

chmod u+x test
ls -l test
-rwxr--r--@ 1 franklin  staff  163 Nov  2 11:14 test

执行脚本

OK,现在我们可以运行 test 脚本了:

./test

The time and date are: Thu Nov  2 12:27:35 HKT 2017
Let's see who's logged into the system:
franklin console  Nov  2 10:37
franklin ttys000  Nov  2 11:07

示例虽然简单,但不积跬步何以至千里呢,继续下去吧……

林宏

Frank Lin

Hey, there! This is Frank Lin (@flinhong), one of the 1.41 billion . This 'inDev. Journal' site holds the exploration of my quirky thoughts and random adventures through life. Hope you enjoy reading and perusing my posts.

YOU MAY ALSO LIKE

Shell 中获取用户输入

Linux Notes

2017.11.27

Shell 中获取用户输入

尽管可以通过命令行选项和参数从脚本用户处获取输入,但有时脚本的交互性还需要更强一些,可以使用 bash shell 提供的 read 命令交互地获取用户输入。

Shell 文件测试比较

Linux Notes

2017.11.08

Shell 文件测试比较

这些测试条件使你能够在 shell 脚本中检查文件系统中的文件。它们经常出现在需要进行文件访问的脚本中。

Reveal real IP for Nginx behind a reverse proxy

Tools

2020.12.25

Reveal real IP for Nginx behind a reverse proxy

I'm currently using LogDNA for gathering Nginx logs. However, I can only see IPs from Cloudflare by default in the logs as my server was proxied by Cloudflare. Let's see how to reveal the real IP address of the client in the logs behind such reverse proxy server by using ngx_http_realip_module.

TOC

Ads by Google