大数据系列博客之 --- 深入简出 Shell 脚本语言(提升篇)
首先声明,此系列shell系列博客分为四篇发布,分别是:
基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html
提升篇:https://www.cnblogs.com/lsy131479/p/9914897.html
高级篇:https://www.cnblogs.com/lsy131479/p/9914962.html
面试篇:
6. 条件判断
1.基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ fsdm ]返回true,[] 返回false。
2. 常用判断条件
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
3.案例实操
(1)23是否大于等于22
[fsdm@hadoop101 datas]$ [ -ge ]
[fsdm@hadoop101 datas]$ echo $?
0 (true)
(2)helloworld.sh是否具有写权限
[fsdm@hadoop101 datas]$ [ -w helloworld.sh ]
[fsdm@hadoop101 datas]$ echo $?
0 (true)
(3)/home/fsdm/cls.txt目录中的文件是否存在
[fsdm@hadoop101 datas]$ [ -e /home/fsdm/cls.txt ]
[fsdm@hadoop101 datas]$ echo $?
1 (false)
(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
[fsdm@hadoop101 ~]$ [ condition ] && echo OK || echo notok
OK
[fsdm@hadoop101 datas]$ [ condition ] && [ ] || echo notok
notok
7. 流程控制(重点)
7.1 if 判断
1.基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
2.案例实操
(1)输入一个数字,如果是1,则输出fsdm zhen shuai,如果是2,则输出heihei zhen mei,如果是其它,什么也不输出。
[fsdm@hadoop101 datas]$ touch if.sh
[fsdm@hadoop101 datas]$ vim if.sh #!/bin/bash if [ $ -eq "" ]
then
echo "fsdm zhen shuai"
elif [ $ -eq "" ]
then
echo "heihei zhen mei"
fi [fsdm@hadoop101 datas]$ chmod if.sh
[fsdm@hadoop101 datas]$ ./if.sh
fsdm zhen shuai
7.2 case 语句
1.基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
1) case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
2) 双分号“;;”表示命令序列结束,相当于java中的break。
3) 最后的“*)”表示默认模式,相当于java中的default。
2.案例实操
(1)输入一个数字,如果是1,则输出fsdm,如果是2,则输出heihei,如果是其它,输出renyao。
[fsdm@hadoop101 datas]$ touch case.sh
[fsdm@hadoop101 datas]$ vim case.sh !/bin/bash case $ in
"")
echo "fsdm"
;; "")
echo "heihei"
;;
*)
echo "renyao"
;;
esac [fsdm@hadoop101 datas]$ chmod case.sh
[fsdm@hadoop101 datas]$ ./case.sh
fsdm
7.3 for 循环
1.基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2.案例实操
(1)从1加到100
[fsdm@hadoop101 datas]$ touch for1.sh
[fsdm@hadoop101 datas]$ vim for1.sh #!/bin/bash s=
for((i=;i<=;i++))
do
s=$[$s+$i]
done
echo $s [fsdm@hadoop101 datas]$ chmod for1.sh
[fsdm@hadoop101 datas]$ ./for1.sh
“”
3.基本语法2
for 变量 in 值1 值2 值3…
do
程序
done
4.案例实操
(1)打印所有输入参数
[fsdm@hadoop101 datas]$ touch for2.sh
[fsdm@hadoop101 datas]$ vim for2.sh #!/bin/bash
#打印数字 for i in $*
do
echo "fsdm love $i "
done [fsdm@hadoop101 datas]$ chmod for2.sh
[fsdm@hadoop101 datas]$ bash for2.sh heihei haha hehe
ban xx love heihei
ban xx love haha
ban xx love hehe
(2)比较$*和$@区别
(a)$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。
[fsdm@hadoop101 datas]$ touch for.sh
[fsdm@hadoop101 datas]$ vim for.sh #!/bin/bash for i in $*
do
echo "fsdm love $i "
done for j in $@
do
echo "fsdm love $j"
done [fsdm@hadoop101 datas]$ bash for.sh heihei haha hehe
fsdm love heihei
fsdm love haha
fsdm love hehe
fsdm love heihei
fsdm love haha
fsdm love hehe
(b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数。
[fsdm@hadoop101 datas]$ vim for.sh #!/bin/bash for i in "$*"
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo "fsdm love $i"
done for j in "$@"
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
echo "fsdm love $j"
done [fsdm@hadoop101 datas]$ chmod for.sh
[fsdm@hadoop101 datas]$ bash for.sh heihei haha hehe
fsdm love heihei haha hehe
fsdm love heihei
fsdm love haha
fsdm love hehe
7.4 while 循环
1.基本语法
while [ 条件判断式 ]
do
程序
done
2.案例实操
(1)从1加到100
[fsdm@hadoop101 datas]$ touch while.sh
[fsdm@hadoop101 datas]$ vim while.sh #!/bin/bash
s=
i=
while [ $i -le ]
do
s=$[$s+$i]
i=$[$i+]
done echo $s [fsdm@hadoop101 datas]$ chmod while.sh
[fsdm@hadoop101 datas]$ ./while.sh
8. read读取控制台输入
1.基本语法
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数
变量:指定读取值的变量名
2.案例实操
(1)提示7秒内,读取控制台输入的名称
[fsdm@hadoop101 datas]$ touch read.sh
[fsdm@hadoop101 datas]$ vim read.sh #!/bin/bash read -t -p "Enter your name in 7 seconds " NAME
echo $NAME [fsdm@hadoop101 datas]$ ./read.sh
Enter your name in seconds fsdm
fsdm
9. 函数
9.1 系统函数
1.basename基本语法
basename [string / pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
2.案例实操
(1)截取该/home/fsdm/fsdm.txt路径的文件名称
[fsdm@hadoop101 datas]$ basename /home/fsdm/fsdm.txt
fsdm.txt
[fsdm@hadoop101 datas]$ basename /home/fsdm/fsdm.txt .txt
fsdm
3. dirname基本语法
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
4.案例实操
(1)获取fsdm.txt文件的路径
[fsdm@hadoop101 ~]$ dirname /home/fsdm/fsdm.txt
/home/fsdm
9.2 自定义函数
1.基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
funname
2.经验技巧
(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
3.案例实操
(1)计算两个输入参数的和
[fsdm@hadoop101 datas]$ touch fun.sh
[fsdm@hadoop101 datas]$ vim fun.sh #!/bin/bash
function sum()
{
s=
s=$[ $ + $ ]
echo "$s"
} read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2; [fsdm@hadoop101 datas]$ chmod fun.sh
[fsdm@hadoop101 datas]$ ./fun.sh
Please input the number1:
Please input the number2:
基础篇结束,如需深入请阅读后续篇章,如有疑问私信或评论指出
大数据系列博客之 --- 深入简出 Shell 脚本语言(提升篇)的更多相关文章
- 大数据系列博客之 --- 深入简出 Shell 脚本语言(高级篇)
		首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ... 
- 大数据系列博客之 --- 深入简出 Shell 脚本语言(基础篇)
		首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ... 
- 大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置
		前言 经过前三篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,当然,我相信安装的过程肯定遇到或多或少的问题,这些都需要自己解决,解决的过程就是学习的过程,本篇的来介绍几个Hadoop环 ... 
- 窥探Swift系列博客说明及其Swift版本间更新
		Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ... 
- 大数据系列(5)——Hadoop集群MYSQL的安装
		前言 有一段时间没写文章了,最近事情挺多的,现在咱们回归正题,经过前面四篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,相关的两款软件VSFTP和SecureCRT也已经正常安装了. ... 
- 大数据系列(3)——Hadoop集群完全分布式坏境搭建
		前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ... 
- 大数据系列(2)——Hadoop集群坏境CentOS安装
		前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ... 
- Django 系列博客(十四)
		Django 系列博客(十四) 前言 本篇博客介绍在 html 中使用 ajax 与后台进行数据交互. 什么是 ajax ajax(Asynchronous Javascript And XML)翻译 ... 
- Django 系列博客(十三)
		Django 系列博客(十三) 前言 本篇博客介绍 Django 中的常用字段和参数. ORM 字段 AutoField int 自增列,必须填入参数 primary_key=True.当 model ... 
随机推荐
- python - class类 (七) 三大特性 - 封装 结尾
			封装: # 封装 #第一层,类就是麻袋,本身就是一种封装 #第二层,类中定义私有的,至在类的内部使用,外部无法访问 #第三层,封装在于明确区分内外,使得类实现者可以修改封装内的东西二不影响外部调用者 ... 
- Weblogic的安装与卸载
			一.下载weblogic 到Oracle官网https://www.oracle.com/downloads/index.html,我在这里下载的是weblogic12C进行安装:https://ww ... 
- 【vim】保存文件并退出 :w=:wq
			这两个命令实际上并不完全等价,当文件被修改时两个命令时相同的.但如果未被修改,使用 :x 不会更改文件的修改时间,而使用 :wq 会改变文件的修改时间. 
- mysql系列十三、mysql中replace into和duplicate key的使用区
			一.创建测试表 1.创建唯一索引"b" CREATE TABLE `test2` ( `id` int(10) NOT NULL AUTO_INCREMENT, `a` varch ... 
- dubbo系列七、dubbo @Activate 注解使用和实现解析
			一.用法 Activate注解表示一个扩展是否被激活(使用),可以放在类定义和方法上,dubbo用它在spi扩展类定义上,表示这个扩展实现激活条件和时机. @Activate(group = Cons ... 
- python获取当前环境的编码
			# coding:gbk import sys import locale def p(f): print '%s.%s(): %s' % (f.__module__, f.__name__, f() ... 
- spring事物深入了解
			1.问题 1.以前对事物的了解只是停留在声明式事物,配置xml,或使用注解,事物的传播行为也只用过REQUIRED和SUPPORTS,可以说对事物的了解很模糊. 2.直到在开发中遇到问题.. 问题的描 ... 
- MVC开发中的常见错误-06-"无法在发送 HTTP 标头之后进行重定向。"
			通过监视可以看到: 原来是跳转到登录页面后,登录页面中又发送了一个GeMneuItems的请求,用于加载页面图片 
- Windows安装Nginx
			环境:Windows 10 Nginx :nginx-1.13.12 安装步骤: 1.下载Nginx 进入官方网站下载页面 https://nginx.org/en/download.html 可以看 ... 
- HTML5——Data Url生成
			HTML5——Data Url生成 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ... 
