Shell
1.概述
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核
还是一个功能相当强大的编程语言,易编写.易调试.灵活性强
2.shell解析器
查看linux提供的shell解析: cat /etc/shells
Sh和 bash是常用的 bash包含了其他的功能,进行了重新编写
查看默认解析器:echo $SHELL (centos默认的解析器是bash)
3.Shell 脚本入门
脚本格式
脚本为 #!/bin/bash 开头 (指定的解析器)
创建脚本 touch 脚本名.sh
例如:创建脚本并在脚本中输入helloworld
Touch helloworld.sh
Vi helloworld .sh
#!/bin/bash
Echo “helloworld”
Shell脚本入门
脚本是将需要执行的命令保存到文本中,按照顺序执行,他是解释型的,不需要编译
1、脚本格式
2、脚本以#!/bin/bash开头(指定解析器)
#!/bin/bash
#添加描述信息
#Name:谁编写的脚本
#DESC:脚本的描述,作用是什么
#PATH:路径(脚本的路径)
#CREATETIME:创建日期
#UPATETIME:更新日期
实例:
创建一个shell脚本:
1.删除class21下的test文件夹
2.在class21新建一个文件夹test2,在test2中创建3个子文件夹dir1,dir2,dir3
3.在dir2中新建一个文件student.txt
4.在student.txt中添加一个zhangsan
5.打印“任务执行完毕,2019-12-14 09:32:00”
1、编写脚本:
1.#!/bin/env bash 或者 #!/bin/bash
2.添加脚本的描述信息(姓名、描述、路径、创建日期、更新日期等)
3.开始写脚本
[root@jinghang ~]# mkdir class21
[root@jinghang ~]# cd class21/
[root@jinghang class21]# ll
总用量 0
[root@jinghang class21]# vim shell.sh
#!/bin/env bash
1.删除class21下的test文件夹 # 创建class21/test文件 mkdir -p root/class21/test # 删除
rm -rf /root/class21/test
2.新建在class21新建一个文件夹test2,在test2中创建3个子
文件夹dir1,dir2,dir3
mkdir -p /root/class21/test2/dir{1…3}
3.在dir2中新建一个文件student.txt
进入dir2
cd /root/class21/test2/dir2
添加student.txt文件
touch student.txt
4.在student.txt中添加一个zhangsan
echo “张三” >> student.txt
5.打印“任务执行完毕,2019-12-14 09:32:00"
echo "任务执行完毕 date "+%Y-%m-%d %H:%M:%S""
#!/bin/env bash
rm -rf /root/class21/test
mkdir -p /root/class21/test2/dir{1…3}
cd /root/class21/test2/dir2
touch student.txt
echo “zhangsan” >> student.txt
echo "任务执行完毕 date "+%Y-%m-%d %H:%M:%S""
执行方式:
(3)脚本的常用执行方式
第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
sh+脚本的相对路径
[jinghnag@hadoop101 datas]$ sh helloworld.sh
Helloworld
sh+脚本的绝对路径
[jinghnag@hadoop101 datas]$ sh /home/jinghnag/datas/helloworld.sh
helloworld
bash+脚本的相对路径
[jinghnag@hadoop101 datas]$ bash helloworld.sh
Helloworld
bash+脚本的绝对路径
[jinghnag@hadoop101 datas]$ bash /home/jinghnag/datas/helloworld.sh
Helloworld
第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x,推荐采用这种方式)
(a)首先要赋予helloworld.sh 脚本的+x权限
[jinghnag@hadoop101 datas]$ chmod +x helloworld.sh
(b)执行脚本
相对路径
[jinghnag@hadoop101 datas]$ ./helloworld.sh
Helloworld
绝对路径
[jinghnag@hadoop101 datas]$ /home/jinghnag/datas/helloworld.sh
Helloworld
注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
4 Shell中的变量
4.1系统变量
常用的有$HOME $PWD $SHELL $USER 等
例:
1查看系统变量的值 Echo $HOME
2 显示当前Shell中所有变量 set
4.2 自定义变量
4.2.1.语法
定义变量:变量=值 中间不能有空格
撤销变量:unset 变量
声明静态变量:readonly 变量 这个变量只能读,不能修改或者撤销
4.2.2规则
变量名称可以由字母/数字和下划线组成,但是不能以数字开头,环境变量名建议大写
等号两侧不能有空格
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
变量的值如果有空格,需要用双引号或单引号括起来。
例:
定义变量A A=5
查看变量 $A
重新赋值 A=3
撤销变量A unset A
声明静态变量B readonly B=2
变量无法进行数值计算
变量的值如果有空格,需要使用双引号或单引号括起来
4.2.3把变量提升为全局环境变量 可供其他shell程序使用
Export + 变量名
4.3 特殊变量
4.3.1 $n
n功能:n为数字, n 功能:n为数字,n功能:n为数字,n代表该脚本名称,$1-$9代表第一到第九个参数, 十以上的参数需要用大括号包含
例:
4.3.2$#
$# 功能:获取所有输入参数个数,常用于循环
4.3.3$* $@
∗功能:代表命令行中所有的参数, * 功能:代表命令行中所有的参数,∗功能:代表命令行中所有的参数,*把所有的参数看成一个整体
@功能:功能一样,但是 @ 功能:功能一样,但是@功能:功能一样,但是@是把每个参数区分对待
4.3.4 $?
$? 功能:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个 命令正确执行;如果非0.则证明上一个命令执行不正确了。