【摘要】 打怪升级之小白的大数据之旅(四十)
Shell编程
上次回顾
上一章对Linux的常用命令进行了总结分享,命令比较多,VIM是必须要首先熟练的,其次就是按照优先级去练习,本章节对Shell编程进行分享,当然了,我只将后面大数据中可能用到的知识点进行分享,Shell编程真的展开来讲,至少得半个月到一个月。。。我们不是运维,不要纠结,只需要关系我在博客里提到过的知识点…
打怪升级之小白的大数据之旅(四十)
Shell编程
上次回顾
上一章对Linux的常用命令进行了总结分享,命令比较多,VIM是必须要首先熟练的,其次就是按照优先级去练习,本章节对Shell编程进行分享,当然了,我只将后面大数据中可能用到的知识点进行分享,Shell编程真的展开来讲,至少得半个月到一个月。。。我们不是运维,不要纠结,只需要关系我在博客里提到过的知识点哈
Shell概述
- Shell就是一个命令行解释器,就如同我们在Windows中的cmd一样,它用于接收应用程序或者用户的命令,然后再调用操作系统内核
- 比如我们java刚开始在命令行使用的javac编译与java运行命令,就是通过Windows的命令行解析器调用操作系统内核,然后执行我们的java代码
- Linux的shell和Windows的Cmd做的事情是一样的,只不过Linux的Shell更加强大
- 上面说过,Shell是一个命令行解析器,既然是解析器,那么自然就有很多的版本了,在Linux中提供的Shell解析器有:
# 查看shell的解释器 cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh
- 在我们使用的CentOS中一般默认使用的是bash 解析器,路径是/bin/bash
- Shell也是一个功能相当强大的编程语言,具有易编写、易调试、灵活性强的特点
Shell脚本入门程序
- 入门程序是什么?当然就是hello world啦,Shell编写的程序称为Shell脚本
- 一般我们编写脚本通常使用脚本的后缀名使用
.sh
,sh是bash解析器的一个硬链接,我们可以通过bash xxx.sh进行脚本的运行 - 脚本的格式(我们习惯性的开头指定解析器的脚本)
#!/bin/bash 脚本....
- 第一个脚本程序,首先创建sh文件
vim hello.sh
#!/bin/bash echo "hello world"
- 命令行运行:
bash hello.sh
- 运行脚本的方式还可以直接输入脚本的路径进行运行,但是需要设置可执行的权限,例如我直接
chmod -u+x hello
,然后直接输入这个文件的路径就可以运行 - 使用路径进行脚本运行可以使用相对路径和绝对路径两种方式,我建议使用绝对路径,不过更建议使用bash xx.sh脚本的方式运行
Shell变量
如同java一样,Shell也有变量,只不过它有一点点不同
系统定义的变量
- 我就介绍几个前面遇到的,一般不怎么使用它们,最多使用set这个变量查看一下当前Shell中所有的变量,具体的大家测试一下就懂了
$HOME $PWD $SHELL $USER $PASH set
- set命令可以查看当前shell中所有的变量,不过通常是通过管道过滤来查看某个变量的值的,下面我介绍完自定义变量后会掩饰set的用法
自定义变量
- 自定义变量,就跟java自定义定义变量一样,只不过它不需要声明变量的数据类型
- 基本语法
(1)定义变量:变量=值 (2)撤销变量:unset 变量 (3)声明静态变量:readonly变量,注意:不能unset
- 变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。 (2)等号两侧不能有空格 (3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。 (4)变量的值如果有空格,需要使用双引号或单引号括起来。
- 注意事项:
- 当我们使用readonly时,这个变量就无法撤销了…
- 另外,在shell中,定出来的变量值都是字符串,因此无法做运算,假如我定义了一个变量num=1+1,在输出后,它的值会是字符串的1+1
- 如果我们定义的变量值有空格,那么我们需要双引号或者单引号包起来
- 当我们定义变量后,它的作用域只是在当前的目录下,如果想定义全局的变量就需要使用
export变量名
,这个知识点我们在搭建hadoop服务器的时候会用到
- 下面进行示例演示,然后演示一下前面提到的set用法,
set
通常配合|grep管道符来查看变量的值# 自定义一个变量name,值是hello,然后使用set变量查看变量name的值 name=hello set grep|$name # 定义变量A A=5 # 给变量A重新赋值 A=8 # 撤销变量A unset A # 声明静态的变量B=2,不能unset\ readonly B=2
特殊变量
- 特殊变量的作用是命令行传参,假设我们需要通过用户来自定义参数,就需要下面的特殊变量
$n
- $n用于接收参数的个数
- 基本语法
$n (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
- 示例
# 1. 创建一个sh脚本文件 vim parameter.sh # 2.通过vim进行脚本编写,接收两个参数 #!/bin/bash echo "$0 $1 $2" # 运行脚本,向该文件传递参数 parameter.sh cls xz # 输出的内容 ./parameter.sh cls xz
- 注意啦,参数是从1开始的,我们定义的0代表的是该脚本文件的名称
$#
- $#用于统计我们传递参数的个数,通常用于配合循环使用,别急后面会讲到循环
- 基本语法
$# (功能描述:获取所有输入参数个数,常用于循环)
- 示例
# 创建脚本文件 vim parameter.sh # 编写脚本文件 #!/bin/bash echo "$0 $1 $2" echo $# # 运行脚本,向该文件传递参数 bash parameter.sh cls xz # 输出的内容 parameter.sh cls xz 2
$*和$@
这两个变量都是代表命令行中所有的参数,具体的区别,我会在循环中演示
- 基本语法
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体) $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
- 示例
# 创建sh脚本 vim parameter.sh # 编写脚本文件 #!/bin/bash echo "$0 $1 $2" echo $# echo $* echo $@ # 运行脚本并传递参数 bash parameter.sh 1 2 3 # 输出的内容 parameter.sh 1 2 3 1 2 3 1 2 3
$?
- 这个参数用于返回最后一次执行命令的返回状态,它有两个返回值0和1,通常情况下我们可以将它理解为布尔值,如果我们最后一次执行命令没有问题,成功了,它返回的值就是0,反之就是1
- 基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
- 示例
# 执行脚本 bash helloworld.sh # 输出结果 hello world # 判断helloworld.sh脚本是否正确执行 $? # 输出结果 0
Shell的运算符
- 在前面介绍变量的时候说过,Shell默认的变量值都是字符串,那么我们要想做运行就需要通过运算符,运算符比较简单,通过案例就可以明白了
- 基本语法
“$((运算式))”或“$[运算式]”
- 我建议使用
$[运算式]
的方法,更加清爽易读 - 示例
# 定义变量S,计算(2+3)X4的值
S=$[(2+3)*4]
# 使用echo输出S变量的值
echo $S
# 输出结果
20
条件判断
-
我们在java中学习运算符时不仅仅是算术运算符,还有比较运算符等等,Shell中同样也有自己的比较运算符,但它有很多的特点,因此我单独将它抽出来
-
基本语法
(1)test 表达式 (2)[ 表达式](注意表达式前后要有空格) 注意:条件非空即为true,[ 表达式 ]返回true,[] 返回false。
-
常用的判断条件
比较两个参数
条件参数 参数说明 = 字符串比较 -eq 等于(equal) -lt 小于(less than) -le 小于等于(less equal) -gt 大于(greater than) -ge 大于等于(greater equal) -ne 不等于(Not equal) © 版权声明文章版权归作者所有,未经允许请勿转载。THE END
喜欢就支持一下吧
相关推荐