语法基础
Shell 语法基础
Shebang
#! 脚本中使用的语法表示在 UNIX/Linux 操作系统下执行的解释器。大多数 Linux shell 和 perl/python 脚本以以下行开头:
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/python
#!/usr/bin/python3
#!/usr/bin/env bash
脚本中所有的语句都会使用首行声明的解释器来进行执行,绝大部分的脚本都是以 #!/bin/bash
开始,这就保证了不管该脚本在何解释器中运行都会被 Bash 来执行;如果我们不添加任何的 Shebang 行,那么会默认使用 /bin/sh
来执行。Shebang 由 Dennis Ritchie 在 7 版 Unix 和 8 版之间在 Bell Laboratories 推出。然后,它也被添加到伯克利的 BSD 系列中
/bin/sh
sh 是系统的标准命令解释器。sh 的当前版本正在更改中,以符合 Shell 的 POSIX 1003.2 和 1003.2a 规范。典型的脚本如下:
#! /bin/sh
### BEGIN INIT INFO
# Provides: policykit
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Create PolicyKit runtime directories
# Description: Create directories which PolicyKit needs at runtime,
# such as /var/run/PolicyKit
### END INIT INFO
# Author: Martin Pitt <martin.pitt@ubuntu.com>
case "$1" in
start)
mkdir -p /var/run/PolicyKit
chown root:polkituser /var/run/PolicyKit
chmod 770 /var/run/PolicyKit
;;
stop|restart|force-reload)
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
:
/usr/bin/env bash
/usr/bin/env
在修改后的环境中运行 bash 之类的程序。它使您的 bash 脚本具有可移植性。#/usr/bin/env bash
的优点是它将使用运行用户的 $PATH
变量中首先出现的 bash 可执行文件。
#!/usr/bin/env bash
# Purpose: Mount glusterfs at boot time
# Must run as root
# Author: Vivek Gite
# --------------------------------------
p='gfs01:/gvol01'
mount | grep -wq "^${p}"
if [ $? -ne 0 ]
then
mount -t glusterfs "$p" /sharedwww/
fi
注释
Shell 中以 # 表示单行注释:
#!/bin/bash
# A Simple Shell Script To Get Linux Network Information
# Vivek Gite - 30/Aug/2009
echo "Current date : $(date) @ $(hostname)"
echo "Network configuration"
/sbin/ifconfig
以#开头的单词或行会导致该单词和该行上的所有剩余字符被忽略。这些行不是要执行 bash 的语句。实际上,bash 完全忽略了它们。这些注释称为注释。只是关于脚本的解释性文字。它使源代码更易于理解。这些说明适用于人类和其他系统管理员。它可以帮助其他系统管理员理解您的代码,逻辑,并可以帮助他们修改您编写的脚本。
多行注释的定义方式如下:
#!/bin/bash
echo "Adding new users to LDAP Server..."
<<COMMENT1
Master LDAP server : dir1.nixcraft.net.in
Add user to master and it will get sync to backup server too
Profile and active directory hooks are below
COMMENT1
echo "Searching for user..."