OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

如果需要,提示可以执行 shell 脚本并在不同条件下表现不同。 您甚至可以在每次发出命令时让提示播放一首曲子,尽管这很快就会变得无聊。 更多信息可以在 Bash-Prompt HOWTO 中找到。


图片

7.2.5. 外壳脚本


7.2.5.1.什么是脚本?


正如我们在 shell 配置示例中看到的,shell 脚本是一个包含 shell 命令的文本文件。 当调用 Bash 时将这样的文件用作第一个非选项参数时,并且 -c 也不 -s 选项,Bash 从文件中读取并执行命令,然后退出。 这种操作模式创建了一个

非交互式外壳。 当 Bash 运行 shell 脚本时,它会设置特殊参数 0 到文件名,而不是外壳的名称,并且位置参数(脚本名称之后的所有内容)被设置为剩余的参数,如果有的话。 如果没有提供额外的参数,位置参数将被取消。


可以使用以下命令使 shell 脚本可执行 CHMOD 命令打开执行位。 当 Bash 在搜索时发现这样的文件 PATH 对于命令,它会生成一个子shell 来执行它。 换句话说,执行


文件名 争论


相当于执行


打坏 文件名参数


如果“文件名”是一个可执行的 shell 脚本。 这个子 shell 重新初始化自己,所以效果就像调用了一个新的 shell 来解释脚本,除了父级记住的命令的位置(参见 哈希 在信息页面中)由孩子保留。


大多数 UNIX 版本都将此作为操作系统命令执行机制的一部分。 如果脚本的第一行以两个字符“#!”开头,则该行的其余部分指定程序的解释器。 因此,您可以指定 打坏, AWK, perl的 或其他一些解释器或 shell 并用该语言编写脚本文件的其余部分。


解释器的参数由脚本文件第一行解释器名称后面的单个可选参数、脚本文件名称和其余参数组成。 Bash 将在自己不处理它的操作系统上执行此操作。


Bash 脚本通常以


#! / bin / bash (假设 Bash 已经安装在 /箱),因为这确保了 Bash 将用于解释脚本,即使它是在另一个 shell 下执行的。


图片


7.2.5.2. 一些简单的例子


一个非常简单的脚本,只包含一个命令,向执行它的用户打招呼:


[杰瑞@无处~] 猫你好.sh

#!/斌/庆典

echo "你好 $USER"

[杰瑞@无处~] 猫你好.sh

#!/斌/庆典

echo "你好 $USER"

该脚本实际上只包含一个命令, 回音,使用 价值 ($) USER 环境变量以打印为发出命令的用户定制的字符串。


另一个单行,用于显示已连接的用户:


#!/斌/庆典

谁| 剪切 -d " " -f 1 | 排序 -u

#!/斌/庆典

谁| 剪切 -d " " -f 1 | 排序 -u

这是一个包含更多行的脚本,我用它来制作目录中所有文件的备份副本。 脚本首先列出当前目录中的所有文件并将其放入变量中 清单. 然后它为每个文件设置副本的名称,然后复制文件。 对于每个文件,都会打印一条消息:


蒂尔:~> 猫箱/makebackupfiles.sh

#!/斌/庆典

# 复制目录中的所有文件 LIST=`ls`

对于 $LIST 中的 i; 做

原点=$i

DEST=$i.old

cp $ORIG $DEST 回声“复制的 $i”

完成

蒂尔:~> 猫箱/makebackupfiles.sh

#!/斌/庆典

# 复制目录中的所有文件 LIST=`ls`

对于 $LIST 中的 i; 做

原点=$i

DEST=$i.old

cp $ORIG $DEST 回声“复制的 $i”

完成

只需输入一行 mv * *。老的 将不起作用,因为您在一组测试文件上尝试此操作时会注意到。 一个 回音 添加命令是为了显示一些活动。 回音's 通常在脚本不起作用时很有用:在每个可疑步骤后插入一个,您很快就会发现错误。


/etc/rc.d/init.d 目录包含大量示例。 让我们看看这个控制虚构的 ICanSeeYou 服务器的脚本:


#!/ bin / sh的

# 描述:ICanSeeYou 可以让你看到联网的人


# 进程名称:ICanSeeYou

# pid文件:/var/run/ICanSeeYou/ICanSeeYou.pid

# 配置:/etc/ICanSeeYou.cfg


# 源函数库。

。 /etc/rc.d/init.d/functions


# 看看我们是如何(使用哪些参数)被调用的。 案例“$1”在

启动)

echo -n "启动 ICanSeeYou:" 守护进程 ICanSeeYou

回音

触摸 /var/lock/subsys/ICanSeeYou

;;

停止)

echo -n "正在关闭 ICanSeeYou:"

#!/ bin / sh的

# 描述:ICanSeeYou 可以让你看到联网的人


# 进程名称:ICanSeeYou

# pid文件:/var/run/ICanSeeYou/ICanSeeYou.pid

# 配置:/etc/ICanSeeYou.cfg


# 源函数库。

。 /etc/rc.d/init.d/functions


# 看看我们是如何(使用哪些参数)被调用的。 案例“$1”在

启动)

echo -n "启动 ICanSeeYou:" 守护进程 ICanSeeYou

回音

触摸 /var/lock/subsys/ICanSeeYou

;;

停止)

echo -n "正在关闭 ICanSeeYou:"


killproc ICanSeeYou 回声

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

地位)

状态 ICanSeeYou

;;

重新启动)

$ 0停止

$ 0开始

;;

*)

echo "用法:$0 {start|stop|restart|status}" exit 1

ESAC


退出0

killproc ICanSeeYou 回声

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

地位)

状态 ICanSeeYou

;;

重新启动)

$ 0停止

$ 0开始

;;

*)

echo "用法:$0 {start|stop|restart|status}" exit 1

ESAC


退出0

首先,与 . command (dot) 一组 shell 函数,几乎所有的 shell 脚本都在使用

/etc/rc.d/init.d, 已加载。 然后一个 案件 命令发出,它定义了脚本可以执行的 4 种不同方式。 一个例子可能是 我能看见你 开始. 通过读取脚本的(第一个)参数来决定应用哪种情况,表达式为 $1.


如果未提供符合要求的输入,则会应用标有星号的默认情况,脚本会在此情况下给出错误消息。 这 案件 列表以 ESAC 陈述。 在里面 开始 如果服务器程序作为守护进程启动,并且分配了进程 ID 和锁。 在里面 停止 在这种情况下,服务器进程被跟踪并停止,并且锁和PID被删除。 选项,例如 守护 选项和功能,如 杀死进程, 定义在 /etc/rc.d/init.d/functions 文件。 此设置特定于本示例中使用的发行版。 您系统上的初始化脚本可能会使用在其他文件中定义的其他函数,或者根本不使用。


成功后,脚本将向其父级返回零退出代码。


这个脚本是使用函数的一个很好的例子,它使脚本更容易阅读,工作完成得更快。 请注意,他们使用 sh 而不是 打坏,使它们在更广泛的系统上有用。 在 Linux 系统上,调用 打坏 as sh 导致 shell 以符合 POSIX 的模式运行。


OnWorks 的顶级操作系统云计算: