学习网站:Shell 脚本教程 - Shell 脚本教程 (shellscript.sh)
基本格式
1、Shebang(#!)行:这是脚本文件的第一行,用来指定解释器的路径。在Bash脚本中通常是 #!/bin/bash
,表示使用Bash作为解释器。例如:
#!/bin/bash
2、注释:以 #
开头的行表示注释,用来解释和说明脚本中的代码。
3、变量定义:在Bash中,变量的定义不需要显式声明类型,直接赋值即可。例如:
NAME="John"
AGE=30
4、命令执行:可以直接在脚本中执行命令,并将结果赋给变量或者直接输出。例如:
CURRENT_DATE=$(date +%Y-%m-%d)
echo "Today's date is $CURRENT_DATE"
5、控制结构:Bash支持常见的控制结构,如条件判断和循环。
- 条件判断:
if [ condition ]; then
# statements
fi
- 循环:
#for循环
for item in list; do
# statements
done
#while循环
while condition
do
# commands
done
#until循环 条件不满足时执行
until condition
do
# commands
done
#select循环
PS3="Select a fruit: "
select fruit in Apple Orange Banana Exit
do
case $fruit in
Apple)
echo "You selected Apple."
;;
Orange)
echo "You selected Orange."
;;
Banana)
echo "You selected Banana."
;;
Exit)
echo "Exiting."
break
;;
*)
echo "Invalid option."
;;
esac
done
6、函数定义:可以定义和使用函数来组织和重用代码块。例如:
function greet {
echo "Hello, $1!"
}
greet "World"
7、退出状态码:脚本执行完毕后可以通过 exit
命令指定退出状态码。通常,0 表示成功,非零值表示错误。
8、文件权限:在使用Bash脚本时,需要确保脚本文件具有执行权限。可以使用 chmod +x script.sh
命令添加执行权限。
变量使用
1、变量的定义和赋值
在Bash中,变量的定义不需要显式声明类型,直接通过赋值来创建变量。
NAME="John"
AGE=30
2、变量的引用
可以使用 $
符号来引用变量的值。在变量名后面直接跟着 $
符号,Bash会替换成变量的值。
echo "My name is $NAME"
echo "I am $AGE years old"
3、变量替换和扩展
在Bash中,有多种方式可以对变量进行替换和扩展,以满足不同的需求。
- 花括号扩展:使用花括号
{}
可以明确变量名的边界,有助于在变量名后面直接添加字符。
GREETING="Hello"
echo "${GREETING}, World!"
- 变量默认值:可以使用
${VAR:-default}
语法来设定变量的默认值,如果变量未定义或为空,则使用默认值。
# 如果NAME未定义或为空,则使用默认值 "Guest"
echo "Hello, ${NAME:-Guest}"
- 变量存在时使用:使用
${VAR:+value}
语法,仅当变量存在且非空时,才使用指定的值。
# 如果NAME存在且非空,则添加问候
echo "Hello, ${NAME:+$NAME}"
- 字符串长度:使用
${#VAR}
可以获取变量的长度。
STR="Hello, World!"
echo "Length of STR is ${#STR}"
4、命令替换
可以将命令的输出结果赋给变量,使用 $()
或者反引号 `` 来执行命令,并将结果赋给变量。
CURRENT_DATE=$(date +%Y-%m-%d)
echo "Today's date is $CURRENT_DATE"
5、使用特殊变量
Bash 中有一些特殊变量,如 $0
, $1
, $@
, $*
等,用于访问脚本自身的参数和命令行参数。
echo "Script name: $0"
echo "First argument: $1"
echo "All arguments: $@"
6、只读变量
可以使用 readonly
命令将变量定义为只读,不允许修改其值。
readonly MYVAR="This is read-only"
7. 删除变量
使用 unset
命令可以删除变量。
unset MYVAR