转自http://c.biancheng.net/shell/
Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件。
常见的 Shell 有 sh、bash、csh、tcsh、ash 等
Base shell 默认的提示符是美元符号$
;对于超级用户(root 用户),Bash Shell 默认的提示符是井号#
。该符号表示 Shell 等待输入命令。
Shell 是一个程序,一般都是放在/bin或者/user/bin目录下,当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中。/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用 cat 命令查看它
通过 cat 命令来查看当前 Linux 系统的可用 Shell:
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
查看当前 Linux 的默认 Shell
$ echo $SHELL
/bin/bash
touch test.sh
扩展名sh代表 shell,扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用php好了。
在 test.sh 中输入代码:
#!/bin/bash #系统查找到正确的解释器
echo "Hello World !" #这是一条语句
第 1 行的#!
是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell;后面的/bin/bash
就是指明了解释器的具体位置。
第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指终端)输出文本。在.sh
文件中使用命令与在终端直接输入命令的效果是一样的。
第 2 行的#
及其后面的内容是注释。Shell 脚本中所有以#
开头的都是注释(当然以#!
开头的除外)
shell脚本也是一种解释执行的程序,可以在终端直接调用(需要使用 chmod 命令给 Shell 脚本加上执行权限),如下所示:
$ cd demo #切换到 test.sh 所在的目录
$ chmod +x ./test.sh #使脚本具有执行权限
$ ./test.sh #执行脚本
第 2 行中,chmod +x表示给 test.sh 增加执行权限。
第 3 行中,./表示当前目录,整条命令的意思是执行当前目录下的 test.sh 脚本。如果不写./,Linux 会到系统路径(由 PATH 环境变量指定)下查找 test.sh,而系统路径下显然不存在这个脚本,所以会执行失败。
通过这种方式运行脚本,第一行一定要写对,好让系统查找到正确的解释器。
1) 使用点号“.”
点号用于执行某个脚本,甚至脚本没有可执行权限也可以运行。有时候在测试运行某个脚本时可能并不想为此修改脚本权限,这时候就可以使用.
来运行脚本,非常方便
$ . ./test.sh #两点之间有空格
2) 使用 source 命令
与点号类似,source 命令也可读取并在当前环境中执行脚本,同时还可返回脚本中最后一个命令的返回状态;如果没有返回值则返回 0,代表执行成功;如果未找到指定的脚本则返回 false。
$ source test.sh
作为解释器参数
这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:$ /bin/bash test.sh
下面的脚本使用 read 命令从 stdin 获取用户输入的内容并赋值给 PERSON 变量,最后在 stdout 上输出
#!/bin/bash
# Copyright (c) http://c.biancheng.net/shell/
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"