Shell 脚本编写与运行指南(七)
- Linux
- 8天前
- 8热度
- 0评论
在 Linux 系统中,Shell 脚本是一种强大的工具,可以帮助你自动化各种任务。本文将详细介绍如何编写和运行 Shell 脚本,包括基本语法、变量处理、字符串操作和数组使用等内容。无论你是初学者还是有一定经验的开发者,都能从中受益。
什么是 Shell?
Shell 是一个用 C 语言编写的程序,充当用户与 Linux 操作系统之间的桥梁。它不仅是一种命令语言,还是一种程序设计语言。通过 Shell,用户可以访问操作系统内核的各种服务。常见的 Shell 类型包括:
- Bourne Shell(/usr/bin/sh 或 /bin/sh)
- Bourne Again Shell (Bash)(/bin/bash)
- C Shell(/usr/bin/csh)
- Korn Shell(/usr/bin/ksh)
本文将重点关注 Bash,因为它是大多数 Linux 系统的默认 Shell,且因其易用性和免费性而被广泛使用。
创建和运行 Shell 脚本
创建第一个 Shell 脚本
- 打开文本编辑器:使用 vi 或 vim 命令创建一个新的文件,例如 test.sh。
- 编写脚本:在文件的第一行添加解释器路径,通常是 #!/bin/bash。这行代码告诉系统使用哪个 Shell 来解释脚本。
#!/bin/bash
echo "Hello, World!"- 保存文件:确保文件保存在当前目录中。
运行 Shell 脚本
运行 Shell 脚本有多种方法:
1. 作为可执行程序
- 赋予执行权限:使用 chmod 命令赋予脚本执行权限。
chmod +x ./test.sh- 执行脚本:使用 ./ 前缀来指定当前目录下的脚本。
./test.sh注意:必须使用 ./test.sh 而不是 test.sh,因为 test.sh 会让系统在 PATH 环境变量中查找该文件,而当前目录通常不在 PATH 中。
2. 作为解释器参数
- 直接运行解释器:将脚本文件名作为参数传递给解释器。
/bin/bash test.sh- 运行 PHP 脚本:类似地,可以运行其他语言的脚本。
/bin/php test.php这种方式运行的脚本不需要在第一行指定解释器信息,即使指定了也不会生效。
变量和赋值
变量命名规则
- 有效变量名:只能包含字母、数字和下划线,且不能以数字开头。
- 无效变量名:不能使用保留关键字,如 if、for 等。
# 有效的变量名
_var="123"
var2="abc"
# 无效的变量名
if="some_value" # 避免使用 if 作为变量名
variable_with_$=42 # 不能包含特殊字符
?var=123 # 不能以特殊字符开头
user*name=runoob # 不能包含特殊字符
variable with space="value" # 不能包含空格赋值和使用变量
- 直接赋值:使用 = 进行赋值,等号两侧不能有空格。
variable_name=value- 使用变量:在变量名前加 $ 符号。
your_name="qinjx"
echo $your_name
echo ${your_name}注意:${} 是可选的,但在变量名后面紧跟其他字符时,使用 ${} 可以帮助解释器识别变量的边界。
变量重新赋值
已定义的变量可以被重新赋值,但第二次赋值时不能使用 $ 符号。
your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被修改。
#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com" # 这行会报错删除变量
使用 unset 命令可以删除变量。删除后,变量不能再被使用。
#!/bin/bash
myUrl="https://www.runoob.com"
unset myUrl
echo $myUrl # 没有任何输出字符串操作
字符串定义
字符串可以用单引号、双引号或不加引号来定义。
my_string='Hello, World!'
my_string="Hello, World!"单引号和双引号的区别
- 单引号:单引号中的任何字符都会原样输出,变量无效,不能包含单独的单引号。
- 双引号:双引号中的变量会被解析,可以包含转义字符。
your_name="runoob"
str="Hello, I know you are \"$your_name\"!\n"
echo -e $str拼接字符串
可以使用双引号或单引号拼接字符串。
your_name="runoob"
greeting="hello, $your_name !"
greeting_1="hello, ${your_name}!"
echo $greeting
echo $greeting_1
greeting_2='hello, ' $your_name ' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2
echo $greeting_3获取字符串长度
使用 ${#string} 获取字符串的长度。
string="abcd"
echo ${#string} # 输出 4提取子字符串
从字符串中提取子字符串。
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo查找子字符串
查找字符在字符串中的位置。
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4数组操作
定义数组
数组可以用括号来表示,元素用空格分隔。
my_array=(1 2 3 4 5)也可以单独定义数组的各个元素。
my_array[0]=1
my_array[1]=2
my_array[2]=3读取数组
使用 ${数组名[下标]} 读取数组元素。
echo ${my_array[0]} # 输出 1获取数组的所有元素
使用 @ 或 * 获取数组的所有元素。
echo ${my_array[@]} # 输出 1 2 3 4 5获取数组的长度
使用 ${#数组名[@]} 获取数组的长度。
length=${#my_array[@]}
echo $length # 输出 5注释
单行注释
以 # 开头的行是注释,会被解释器忽略。
# 这是一条注释多行注释
可以使用 :<<EOF 格式进行多行注释。
:<<'EOF'
这是注释的部分。
可以有多行内容。
EOF使用函数实现多行注释
将需要注释的代码块定义为一个函数,不调用该函数即可实现注释效果。
comment() {
echo "这是注释的部分。"
echo "可以有多行内容。"
}总结
通过本文,你已经了解了如何编写和运行 Shell 脚本,包括变量的定义和使用、字符串操作、数组操作以及注释的使用。掌握了这些基础知识,你可以在日常工作中更加高效地使用 Shell 脚本来自动化各种任务。希望本文对你有所帮助,祝你在 Shell 编程的道路上越走越远!