1. Shell基本介绍
Shell是用户与操作系统内核之间的接口,它既是一种命令解释器,又是一种编程语言。它能够批量操作,进行系统自动化管理。
一个典型的Shell脚本包括:
- Shebang:指定解释器,例如
#!/bin/bash - 注释:以
#开头,用于说明 - 命令:要执行的命令
- 控制结构:条件判断、循环等
2. 变量
- 变量的定义
- 定义变量:
变量名=值(注意等号两边不能有空格) - 使用变量:
$变量名或${变量名}
[root@localhost ~]# num=10
[root@localhost ~]# echo $num
10
[root@localhost shell]# echo ${num}
10
[root@localhost shell]# echo "$num"
10
[root@localhost shell]# echo "${num}"
10
# Shell脚本的执行
[root@localhost shell]# vi 1.sh
[root@localhost shell]# cat 1.sh
#!/bin/bash
num=20
echo $num
#方法一:指定路径的命令,要求文件必须有 x 权限。
[root@localhost shell]# chmod +x 1.sh #给用户增加执行权限
[root@localhost shell]# /opt/shell/1.sh #指定绝对路径:/opt/shell/1.sh
20
[root@localhost shell]# ./1.sh #指定相对路径:./1.sh
20
#方法二:指定Shell来解释脚本,不要求文件必须有 x 权限。
[root@localhost shell]# sh 1.sh #sh 脚本路径:sh 1.sh
20
[root@localhost shell]# source 1.sh #source 脚本路径:. 1.sh
20
- 变量的分类
-
自定义变量:由用户自己定义、修改和使用
-
环境变量:由系统维护,用于设置工作环境
-
位置变量:通过命令行给脚本程序传递参数
例如:$0 $1 $2
[root@localhost shell]# vi 2.sh
[root@localhost shell]# cat 2.sh
#!/bin/bash
echo "$0 , $1 , $2"
[root@localhost shell]# sh 2.sh 10 20 #$0:脚本的名字
2.sh , 10 , 20 #$1:第一个参数
#$2:第二个参数
-
预定义变量:Bash中内置的一类变量,不能直接修改
例如:$? $$
[root@localhost shell]# sh 1.sh
20
[root@localhost shell]# echo $? # $?判断上一条指令是否正常,0是正常
0
[root@localhost shell]# 1.sh
-bash: 1.sh: 未找到命令
[root@localhost shell]# echo $?
127 #127 表示 "命令未找到",这是 Shell 的特殊退出码之一
[root@localhost shell]# echo $$ # $$ 输出当前命令的进程
9903
[root@localhost shell]# a=`ps aux | grep "9903"`
[root@localhost shell]# echo $a
root 9903 0.0 0.0 115440 2056 pts/0 Ss+ 18:25 0:00 -bash root 9951 0.0 0.0 112724 984 pts/0 S+ 18:52 0:00 grep --color=auto 9903
-
变量命名规则
命名规则:以字母或者下划线开头,区分大小写
[root@localhost shell]# b=1 #字母开头
[root@localhost shell]# _c=1 #下划线开头
[root@localhost shell]# 1b=1 #不能以数字开头
-bash: 1b=1: 未找到命令
[root@localhost shell]# B=1 #大小写不是一个变量
- 变量的赋值
- 单引号:禁止引用其他变量值,$视为普通字符
[root@localhost shell]# echo '$num'
$num
- 双引号:允许通过$符号引用其他变量值
[root@localhost ~]# echo $num
10
- 反撇号: 命令替换,提取命令执行后的输出结果,
…和$(…)作用相同
[root@localhost shell]# a=`find /opt -name ".txt" | wc -l`
[root@localhost shell]# echo $a
0
- 弱引用:"$num " 弱引用,其中的变量引用会被替换为变量值
[root@localhost shell]# echo "$num"
10
[root@localhost shell]# echo "${num}"
10
- 强引用:'$name ’ 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
[root@localhost shell]# echo '$num'
$num
- 输入
-
read
-
read -p “提示信息” 变量名
[root@localhost shell]# vi 3.sh
[root@localhost shell]# cat 3.sh
#!/bin/bash
read -p "请输入一个数字:" num
echo "输出数字:$num"
[root@localhost shell]# sh 3.sh
请输入一个数字:30
输出数字:30
-
echo -n “提示信息”
read 变量名
[root@localhost shell]# vi 4.sh
[root@localhost shell]# cat 4.sh
#!/bin/bash
echo -n "请输入一个数字:" #不换行输出文本信息
read num1
echo "输出数字:$num1"
[root@localhost shell]# sh 4.sh
请输入一个数字:50
输出数字:50
3. 条件判断
- 整数运算
格式:expr 变量1 运算符 变量2 [运算符 变量3]
| 运算符 | 功能 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | expr 10 + 2 | 12 |
- | 减法 | expr 10 - 2 | 8 |
\* | 乘法 | expr 10 \* 2 | 20 |
/ | 除法 | expr 10 / 2 | 5 |
% | 取余 | expr 10 % 3 | 1 |
#方法1:使用 expr 命令
[root@localhost shell]# expr 10+2 #10+2 被当作一个字符串处理,而不是数学表达式
10+2
[root@localhost shell]# expr 10 + 2 # expr 命令要求运算符两边必须有空格
12
[root@localhost shell]# echo $(expr 10 + 2)
12
[root@localhost shell]# result=`expr 10 + 2`
[root@localhost shell]# echo $result
12
#方法2:使用算术扩展 $(( ))
[root@localhost shell]# echo $(expr 2 \* 3)
6
[root@localhost shell]# echo $((2 * 3))
6
- 文件和目录测试
| 操作符 | 功能说明 | 示例 |
|---|---|---|
-e | 测试文件或目录是否存在 | [ -e /path/to/file ] |
-d | 测试是否为目录 | [ -d /path/to/dir ] |
-f | 测试是否为普通文件 | [ -f /path/to/file ] |
-L | 测试是否为符号链接文件 | [ -L /path/to/link ] |
[root@localhost shell]# [ -e /opt ]
[root@localhost shell]# echo $?
0
- 文件权限测试
| 操作符 | 功能说明 | 示例 |
|---|---|---|
-r | 测试文件是否可读 | [ -r file ] |
-w | 测试文件是否可写 | [ -w file ] |
-x | 测试文件是否可执行 | [ -x file ] |
[root@localhost shell]# [ -r /opt/shell/1.sh ]
[root@localhost shell]# echo $?
0
- 字符串比较
| 操作符 | 功能说明 | 示例 |
|---|---|---|
= | 字符串相等比较 | [ "$a" = "$b" ] |
== | 字符串相等比较 | [ "$a" == "$b" ] |
!= | 字符串不相等比较 | [ "$a" != "$b" ] |
-z | 字符串长度为零 | [ -z "$str" ] |
-n | 字符串长度非零 | [ -n "$str" ] |
- 整数值比较
| 运算符 | 数学符号 | 说明 | 示例 |
|---|---|---|---|
| -eq | == | 等于 | [ $a -eq $b ] |
| -ne | != | 不等于 | [ $a -ne $b ] |
| -gt | > | 大于 | [ $a -gt $b ] |
| -lt | < | 小于 | [ $a -lt $b ] |
| -le | <= | 小于等于 | [ $a -le $b ] |
| -ge | >= | 大于等于 | [ $a -ge $b ] |
[root@localhost shell]# a=10
[root@localhost shell]# b=20
[root@localhost shell]# [ $a -eq $b ]
[root@localhost shell]# echo $?
1

1万+

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



