一、Shell简介
1.1 什么是Shell?
Shell是一个用C语言编写的程序,它是用户与操作系统内核之间的桥梁。用户通过Shell访问操作系统内核服务,它既是一种命令语言,又是一种程序设计语言。
Shell类似于Windows系统中的命令提示符(cmd.exe),但功能更强大。Shell脚本(Shell script)是为Shell编写的脚本程序,Shell编程通常指的是shell脚本编程,而不是开发Shell自身。
1.2 Shell解释器
Linux系统中存在多种Shell解释器,常见的有:
-
bash(Bourne Again Shell)
-
sh(Bourne Shell)
-
csh(C Shell)
-
ksh(Korn Shell)
可通过以下命令查看系统中安装的Shell:
cat /etc/shells
bash因其易用性和免费特性,成为日常工作中最广泛使用的Shell,也是大多数Linux系统默认的Shell。
二、快速入门
2.1 编写第一个Shell脚本
使用vi编辑器创建一个名为hello.sh的文件:
#!/bin/bash echo "Hello World!"
-
#!是一个约定标记,指定脚本使用的解释器(这里是/bin/bash) -
echo命令用于输出文本
2.2 赋予执行权限并执行
chmod +x ./hello.sh # 赋予执行权限 ./hello.sh # 执行脚本
2.3 执行Shell脚本的三种方式
-
./hello.sh(当前目录执行) -
/path/to/hello.sh(全路径执行) -
sh /path/to/hello.sh(作为解释器参数执行)
三、Shell变量
3.1 变量定义与使用
your_name="bigdata.com"
echo $your_name
echo ${your_name}
-
变量名命名规则:首字符必须为字母,不能使用空格、标点符号和bash关键字
-
等号两边不能有空格
3.2 只读变量与删除变量
readonly my_var="constant" # 定义只读变量 unset my_var # 错误!不能删除只读变量
3.3 变量类型
-
局部变量:仅在当前Shell实例中有效
-
环境变量:所有程序都能访问,可用
set命令查看
四、字符串操作
4.1 单引号 vs 双引号
skill='linux' str1='I am good at $skill' # 输出原样字符串 str2="I am good at $skill" # 输出变量值
4.2 字符串操作
str="hadoop"
echo ${#str} # 输出长度:6
echo ${str:2:4} # 输出子串:doop
4.3 查找子字符串
str="I am good at hadoop" echo `expr index "$str" am` # 输出位置:3
五、参数传递
5.1 基本参数传递
#!/bin/bash echo "脚本名:$0" echo "第一个参数:$1" echo "第二个参数:$2"
5.2 特殊参数变量
| 变量 | 说明 |
|---|---|
$# | 参数个数 |
$* | 所有参数(作为一个字符串) |
$@ | 所有参数(作为分开的字符串) |
$? | 上一条命令的退出状态 |
$$ | 当前进程ID |
5.3 $*与$@的区别
#!/bin/bash echo "$@" # "1" "2" "3" echo "$*" # "1 2 3"
六、Shell运算符
6.1 算术运算
val=`expr 2 + 2` # 传统方式 val=$((1+1)) # 推荐方式 val=$[1+2] # 另一种方式
6.2 关系运算符
| 运算符 | 说明 | 示例 |
|---|---|---|
-eq | 等于 | [ $a -eq $b ] |
-ne | 不等于 | [ $a -ne $b ] |
-gt | 大于 | [ $a -gt $b ] |
-lt | 小于 | [ $a -lt $b ] |
6.3 逻辑运算符
[ 10 -gt 5 -a 10 -lt 20 ] # 与运算 [ 10 -gt 5 -o 10 -lt 20 ] # 或运算
6.4 字符串运算符
[ -z "$str" ] # 判断是否为空字符串 [ "$str1" = "$str2" ] # 判断字符串相等
6.5 文件测试运算符
[ -f "/path/to/file" ] # 判断是否为普通文件 [ -d "/path/to/dir" ] # 判断是否为目录
总结
Shell编程是Linux系统管理和自动化运维的重要技能。本文从基础概念到高级用法,全面介绍了Shell编程的各个方面:
-
Shell基础:解释器、脚本编写和执行
-
变量使用:定义、类型、作用域
-
字符串操作:处理、截取、查找
-
参数传递:位置参数、特殊参数
-
运算符:算术、关系、逻辑、文件测试
809

被折叠的 条评论
为什么被折叠?



