大数据系列博客之 --- 深入简出 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 ...
随机推荐
- cetus系列~ 读写分离具体分析
一 简介:上一章我们讲了cetus的基本安装,这章继续分析cetus 二 分析 1 基本配置 1 开启主从延迟检测需在后端数据库创建库proxy_heart_beat和表tb_heartb ...
- JS实现随机背景图片与图片大小变换的效果
经常在网上见一些网站访问一次背景图片改变一次,而且图片的大小不停变换,于是想着自己研究一下. 背景图片可以通过JS的随机数来改变图片的src来实现随机图片,图片的大小变换可以用JS的setInterv ...
- RAC
RAC (Oracle网格计算技术) 编辑 Oracle RAC是Oracle Real Application Cluster的简写,官方中文文档一般翻译为“真正应用集群”,它一般有两台或者两台以上 ...
- CentOS7配置网络
#进入目录 cd /etc/sysconfig/network-scripts/ #编辑ifcfg-XXX vi ifcfg-eno167777 #把onboot=no 改为yes #重启 shutd ...
- ubuntu14.04 安装 openssh-server
ubuntu自带的有openssh-client,所以可以通过 ssh username@host 来远程连接linux 可是要想通过ssh被连接,ubuntu系统需要有openssh-server, ...
- linux暂停一个在运行中的进程【转】
转自:https://blog.csdn.net/Tim_phper/article/details/53536621 转载于: http://www.cszhi.com/20120328/linux ...
- 重装系统,出现:Units specified don't exist SHSUCDX can't install
重装系统,出现:Units specified don't exist SHSUCDX can't install 解决方案1: 首先是你的硬盘分区不对吧 先用PQ格成ntfs或far32 进PE把C ...
- Python3学习笔记22-文件读写
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操 ...
- docker在centos7系统镜像下遇到的一些问题
一.成功安装服务后发现无法启动 报错为:Failed to get D-Bus connection: Operation not permitted 系统为centos7官方版镜像,源和依赖之类的都 ...
- centos6.7环境下kvm虚拟机之virt-install和virsh及virt-manager工具的使用
virt-install工具的使用: virt-install是一个命令行工具,它能够为KVM.Xen或其它支持libvrit API的hypervisor创建虚拟机并完成GuestOS安装:此外,它 ...