文章目录
- 一.Shell Script 介绍
- 1.概念
- 2.应用场景
- 3.demo:第一个Shell脚本test.sh
- 1.三种引号的作用:
- 1)反引号:引用命令的结果
- 2)单引号:强引用,引号中什么内容就输出什么内容
- 3)双引号:弱引用,可引用变量的值
- 1)demo01
- 2)demo02:整数表达式运算
- 1.数值关系运算符
- 2.逻辑运算符
- 3.字符串运算符
- 4.文件运算符(写在文件或目录前面)
- if语句:
- 1.if语句:
- 2.if-else语句:
- 3.if-else-if语句:
- 1.普通for循环:
- 2.增强for循环:
一.Shell Script 介绍
1.概念
- shell脚本是包含一系列命令的文本文件
- shell读取此文件并执行命令
2.应用场景
- 重复性操作
- 批量事务处理
- 自动化运维
- 定时任务执行
3.demo:第一个Shell脚本test.sh
- 输入 :
vi test.sh
,输入如下内容然后保存退出
#!/bin/bashecho \"hello, shell,you\'re very pretty\"
- 输入:
chmod +x test.sh
,赋予文件执行权限
- 输入:
./test.sh
,执行该脚本文件,效果如下:
- 注意:#!是一个约定的标记,他告诉系统这个脚本需要用解释器来执行
二.变量
1.三种引号的作用:
1)反引号:引用命令的结果
2)单引号:强引用,引号中什么内容就输出什么内容
3)双引号:弱引用,可引用变量的值
2.变量的定义和使用
1)demo01
- 1.新建一个param.sh,写入如下内容
#!/bin/bash#变量定义不需要声明类型abc=123#变量的值可以用$符号获取aaa=$JAVA_HOMEaaa=abc#间接引用,用aaa的值去找变量,若这个变量有值,分配给defdef=${!aaa}#找abc的第一个1替换为habc=${abc/1/h}#使用反引号将该命令的结果赋值给变量path=`pwd`#打印结果echo ${aaa}aaa${abc}echo $defecho $path
- 2.给与执行权限,并执行文件,结果如下:
2)demo02:整数表达式运算
- 新建文件,内容如下:
#!/bin/bash#方式一:a=1b=2((c=$a+$b))echo c的值: $c#方式二:d=$[ $a+$b ]echo d的值: $d
- 给与执行权限执行结果如下:
3.预定义变量
选项 | 说明 |
---|---|
$# | 命令行参数或位置参数的数量 |
$? | 最近一次执行的命令或shell脚本的出口状态 |
$* | 表示所有的位置参数,其值是所有位置参数的值 |
$$ | 变量是shell脚本里面的进程id,shell脚本经常使用$$变量组织临时文件名,确保文件名唯一性 |
4.位置变量
- $n(n为数字) : $0 代表命令本身,$1-$9代表顺序参数编号,大于10的话使用括号,如${10}
- 示例如下:
#!/bin/bashecho 参数个数: $#echo 所有位置参数: $*echo \'上一句结果(执行成功为0):\' $?echo 进程id: $$echo 当前命令: $0echo 第一个参数: $1echo 第二个参数: $2
- 执行结果如下:
三.数值关系运算符
1.数值关系运算符
选项 | 说明 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
2.逻辑运算符
选项 | 说明 |
---|---|
-a 或者 && | 逻辑与 |
-o 或者 || | 逻辑或 |
! | 逻辑否 |
3.字符串运算符
选项 | 说明 |
---|---|
= | 等于 |
!= | 不等于 |
-z | 判断是否为空 |
4.文件运算符(写在文件或目录前面)
选项 | 说明 |
---|---|
-d | 判断是否为目录 |
-e | 判断目录或文件是否存在 |
-f | 判断是否为文件 |
-r | 判断文件或目录针对当前用户是否可读 |
-w | 判断文件或目录针对当前用户是否可写 |
-x | 判断文件或目录针对当前用户是否可执行 |
四.流程控制语句
<- bash shell脚本中变量无法存储布尔值,布尔值只能用于条件判断,条件中非空的话结果都为true >
if语句:
1.if语句:
ifthenfi
2.if-else语句:
ifthen...else...fi
3.if-else-if语句:
ifthen...elifthen...else...fi
for循环:
1.普通for循环:
for((a=1;a<=5;a++))do...done
2.增强for循环:
for a in param1 param2 param3 ...do...done
while循环:
a=1while [ a -le 5 ]do...let \"a++\"done
case语句:
case 变量 in值1)...;;值2)...;;*)...;;esac
五.shell的函数
- 语法如下:
函数名(){# 函数体具体代码}函数名-->注意没有括号直接用函数名调用
- 示例:求1-100的和
#!/bin/bashread -p \"请输入一个大于1的整数:\" na(){count=0for((a=1;a<=n;a++))do((count=$count+$a))doneecho 总和为: $count}a
-运行结果如下: