Shell 脚本 编写指南
当您需要执行一系列命令或自动化任务时,Shell 脚本是一种非常有用的工具。Shell 脚本是由一系列 Shell 命令组成的文本文件,可以在命令行或终端中运行。
格式
文件名以 myscript.sh
为后缀,文件中首行声明了脚本使用的是 Bash。
#!
告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序,/bin/bash
指定使用的是哪种。
拓展
在 Linux 系统上主流的 CLI Shell 实现是 Bash,是许多 Linux 发行版默认的 Shell。还有许多 Unix 上的 Shell。
Shell 分类
* Bourne Shell(/usr/bin/sh 或 /bin/sh)
* Bourne Again Shell(/bin/bash)
* C Shell(/usr/bin/csh)
* K Shell(/usr/bin/ksh)
* Shell for Root(/sbin/sh)
myscript.sh
#!/bin/bash
local_directory="/usr/share/nginx/docusaurus"
cd $local_directory
git pull
if [ $? -eq 0 ]; then
echo "代码拉取成功!"
else
echo "代码拉取失败。"
fi
语法
定义变量
local_directory="/usr/share/nginx/myapp"
目录切换
cd "/usr/share/nginx/myapp"
// 或者使用变量
cd $local_directory
变量引用前面加 $
符号
信息输出
echo "你要输出的内容"
接受输入
read -s -p "请输入密码: " password
-s
参数用于隐藏用户的输入。用户输入的内容存储在password
变量中,然后你可以在 下面的执行脚本中使用它。-p
选项用于指定要显示给用户的提示消息(prompt)。
条件判断
判断上一条命令的执行结果
if [ $? -eq 0 ]; then
echo "代码拉取成功!"
else
echo "代码拉取失败。"
fi
$?
在 shell 脚本中表示上一个命令的退出状态码,当一个命令执行成功时,它会返回退出状态码 0,失败时即为非 0。因此,你可以使用 if [ $? -eq 0 ]; then
来判断上一条命令
是否执行成功。
判断文件是否存在
file="/usr/local/nginx/tmp.conf"
if [ -e "$file" ]; then
echo "File $file exists."
else
echo "File $file does not exist."
fi
循环
for i in {1..5}; do
echo "Iteration $i"
done
// 或者使用 while
while [ "$count" -lt 10 ]; do
echo "Count: $count"
((count++))
done
函数
my_function() {
echo "This is a function"
}
my_function