shell编程基础入门-1
文章目录
- 前言
- 1、shell 简介
- 2、shell脚本的构成&执行
- 3、shell-变量
- 3.1 语法格式
- 3.2 变量使用
- 4、字符串
- 4.1 单引号
- 4.2 双引号
- 4.3 获取字符串长度
- 4.4 提取子字符串
- 4.5 查找子字符串
- 5、参数传递
- 5.1 参数传递方式
- 5.2 特殊字符
- 6、运算符
- 6.1 运算符的基本使用
- 6.2 关系运算符
- 6.3 逻辑运算符
- 6.4 字符串运算符
- 6.5 文件测试运算符
- 总结
前言
在日常工作中,在遇到些重复性高的工作时,如果还是依靠手工去解决会浪费大量时间,大大减少了我们工作的效率,这个时候,shell脚本就有作用了,它可以代替我们去完成重复性高的工作,提供我们的工作效率。下面就开始学如何去写shell脚本
1、shell 简介
Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们
2、shell脚本的构成&执行
使用vim命令创建一个demo.sh的文件(一般脚本都是以.sh结尾的文件)
#! /bin/bash/
文本的第一行是脚本申明,使用默认的解释器(/bin/bash/)来执行脚本
后面就是你写的一些命令、控制语句等来完成你的预期,下面是示例
#! /bin/bash/
echo "hello world"
写完后保存并退出:wq
执行脚本有三种方法
- sh demo.sh
- /home/jiang/demo.sh
- ./demo.sh
其中使用路径的方法执行前,需要给文件赋权
## 添加执行权限
chmod +x demo.sh
文件赋权后,可以用绝对路径或者相对路径来执行脚本
3、shell-变量
3.1 语法格式
变量的语法: 变量名=值
# 变量的名字是由写程序的人自主定义的。 通常在shell定义格式为: 一个小写字母单词、 多个单词组成时每个单词之间使用"_"分隔
your_name="bigdata.com"
# 通常开发中命名惯例、见名知其意,如:name、gender、student_name
注意:等号两边不能有空格
命名规则
- 首个字符必须为字母
- 中间不能有空格,可以使用下划线
- 不能使用标点符号
- 不能使用 bash 里的关键字
3.2 变量使用
使用一个定义过的变量,只要在变量名前面加 $ 即可
花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的
边界
your_name="bigdata.com"
echo $your_name
echo ${your_name}
变量是可以重新赋值的
## 定义只读变量
readonly name="bigdata"
## 只读变量不能删除,也不能修改值
## 删除变量
unset name
变量的类型可以分为:局部变量、全局变量
- 局部变量:局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其
他 shell 启动的程序不能访问局部变量 - 全局变量(环境变量):所有的程序,包括shell启动的程序,都能访问环境
变量,有些程序需要环境变量来保证其正常运行。可以用过 set 命令查看当
前环境变量
4、字符串
4.1 单引号
food='KFC'
str='I eat $food'
echo $str
单引号字符串的限制
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不
行),但可成对出现,作为字符串拼接使用
4.2 双引号
food='KFC'
str="I eat $food"
echo $str
- 双引号里可以有变量
- 双引号里可以出现转义字符
4.3 获取字符串长度
food='hsiocnwo'
echo $food
echo ${#food}
在变量名前加#,可以获得该变量值的字符串的长度
4.4 提取子字符串
food='apple KFC banana'
## 从第三个字符开始截取到最后
echo ${food:3}
## 从第三个字符开始,截取八个字符
echo ${food:3:8}
注意:当字符串中有空格时,空格也算一个字符存在
字符串是从0开始计算
4.5 查找子字符串
str='this is an apple and a banana'
echo `expr index "$str" banana`
查找子字符串 “banana"中任何一个字符在字符串”$str" 中首次出现的位置
5、参数传递
5.1 参数传递方式
## 传递参数的方式
./shell.sh [空格] 参数1 [空格] 参数2
## $0 表示当前脚本名称
5.2 特殊字符
$# | 传递到脚本的参数个数 |
---|---|
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程 ID号 |
$! | 后台运行的最后一个进程的 ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误 |
#! /bin/bash
echo "第一个参数为: $1";
echo "参数个数为: $#";
sleep 10 &
echo "后台运行的最后一个的进程号: $!";
echo "当前脚本运行的进程号: " $$;
$ 和 $@*
- 相同点: 都表示传递给脚本的所有参数
- 不同点:被" "包含时
- "$" 会将所有的参数作为一个整体,以"$1 $2 … $n" 的形式组成一个整串
- “$@” 会将各个参数分开,以"$1" “2"…"2" … "2"…"n” 的形式组成一个参数列表
6、运算符
6.1 运算符的基本使用
expr 是一款表达式计算工具,使用它能完成表达式的求值操作
- 运算数和运算符之间要有空格。例如: 2+2 是不能运算的,必须写成 2 + 2
- 完整的表达式要被`符号包含
- 还可以通过(()) 、 $[] 进行算术运算
read -p 提示用户输入-n 定义字符数
6.2 关系运算符
数字的关系运算符: > >= < <= != ==
运算符 | 含义 |
---|---|
-eq | 检测两个数是否相等,相等返回 true |
-ne | 检测两个数是否不相等,不相等返回 true |
-lt | 小于 应用于:整型比较。 例: 10 lt 5 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true |
-le | 小于或等于 应用于:整型比较 |
-ge | 大于或等于 应用于:整型比较 |
6.3 逻辑运算符
运算符 | 含义 |
---|---|
-a | 双方都成立(and) 表达式1 –a 表达式2 |
-o | 单方成立(or) 表达式1 –o 表达式2 |
# && 表示并且(and)
echo "$[10>5 && 10%2==0]"
# || 表示或者 (or)
echo $((10>100 || 10%2==0))
6.4 字符串运算符
运算符 | 含义 |
---|---|
-n STRING | 字符串长度不为零 (非空字符串) |
-z STRING | 字符串长度为0(空字符串) |
= | 判断两个字符串是否一样 |
!= | 判断两个字符串是否不一样 |
6.5 文件测试运算符
运算符号 | 含义 | 示例 |
---|---|---|
-f | 普通文件 | [ -f 文件路径] |
-d | 目录 | [-d 目录路径] |
-s | 文件不为空 | [-s 文件路径] |
-e | 文件存在 | [-e 文件路径] |
-r | 可读文件 | [-r 文件路径] |
-w | 可写文件 | [-w 文件路径] |
-x | 可执行文件 | [-x 文件路径] |