Spark修炼之道(基础篇)——Linux大数据开发基础:第十三节:Shell编程入门(五)

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 本节主要内容while循环控制结构if条件判断until循环控制结构1. while循环控制结构本节例子来源:http://blog.chinaunix.net/uid-25880122-id-2901409.html 语法格式:while expressiondocommandcommanddone(1)计数器格式适用于循环次

本节主要内容

  1. while循环控制结构
  2. if条件判断
  3. until循环控制结构

    1. while循环控制结构

    本节例子来源:http://blog.chinaunix.net/uid-25880122-id-2901409.html
    语法格式:

while expression
do
command
command
done

(1)计数器格式

适用于循环次数已知或固定时

root@sparkslave02:~/ShellLearning/Chapter13# vim whileLoop.sh
.#!/bin/bash
i=1
while(($i<5))
do
echo $i
let i++
done

root@sparkslave02:~/ShellLearning/Chapter13# chmod a+x whileLoop.sh 
root@sparkslave02:~/ShellLearning/Chapter13# ./whileLoop.sh 
1
2
3
4

(2)标志符结束while循环

root@sparkslave02:~/ShellLearning/Chapter13# vim flagWhileLoop.sh
#!/bin/bash
echo "Please input the num (1~~10): "
#接受用户输入
read num
while [[ $num != 4 ]]
do
 #if语句,后面详细介绍,这里判断是否小于4
 if [ $num -lt 4 ]
 then
    echo "Too small ,Try again.."
    read num
 #判断是否大于4
 elif [ $num -gt 4 ]
 then
    echo "Too big ,Try again.. "
    read num
 else
    exit 0
 fi
done
echo "Yes ,you are right !!"

root@sparkslave02:~/ShellLearning/Chapter13# chmod a+x flagWhileLoop.sh root@sparkslave02:~/ShellLearning/Chapter13# ./flagWhileLoop.sh 
Please input the num (1~~10): 
4
Yes ,you are right !!

## 2. if条件判断##
参考:http://blog.chinaunix.net/uid-20735106-id-3434959.html
shell 脚本中的if条件判断功能十分强大,但使用也异常复杂,其语法格式:

if  条件
then
 Command
else
 Command
#if条件判断的结束,用反拼表示
fi                           

最常用的判断为:判断字符串、判断数字、判断文件及逻辑判断等

(1)判断字符串

1.if [ str1=str2 ];then fi  ----当两个字符串相同时返回真
2.if [ str1!=str2 ];then fi ----当两个字符串不相等时返回真
3.if [ -n str1 ];then fi    ----当字符串的长度大于0时返回真 (判断变量是否有值)
4.if [ -z str1 ];then fi    ----当字符串的长度为0时返回真
root@sparkslave02:~/ShellLearning/Chapter13# vim if01.sh
str1="hello"
str2="hell"
#判断两字符串是否相等
if [ str1=str2 ]
then
  echo "equal"
fi

#判断两字符串是否不等
if [ str1!=str2 ]
then
  echo "not equal"
fi

#判断字符串长度是否大于0
if [ -n str1 ]
then
  echo "the length of str1 is not zero"
fi

#判断字符串长度是否等于0
if [ -z str1 ]
then
  echo "the length of str1 is not zero, it can't be executed"
fi

root@sparkslave02:~/ShellLearning/Chapter13# ./if01.sh 
not equal
the length of str1 is not zero

(2)判断数字

1.int1 -eq int2    --相等
2.int1 -ne int2    --不相等
3.int1 -gt int2    --大于
4.int1 -ge int2    --大于等于
5.int1 -lt int2    --小于
6.int1 -le int2    --小于等于

使用示例:

root@sparkslave02:~/ShellLearning/Chapter13# vim if02.sh
i=2
j=3
if [ $i -lt $j ]
then
   echo "i is less than j"
fi

if [ $j -gt $i ]
then
   echo "j is great than i"
fi

root@sparkslave02:~/ShellLearning/Chapter13# chmod a+x if02.sh 

root@sparkslave02:~/ShellLearning/Chapter13# ./if02.sh 
i is less than j
j is great than i

(3)判断文件

文件判断常用命令如下:

1. -r file        --用户可读为真
2. -w file        --用户可写为真
3. -x file        --用户可执行为真
4. -f file        --文件存在且为正规文件为真
5. -d file        --如果是存在目录为真
6. -c file        --文件存在且为字符设备文件
7. -b file        --文件存在且为块设备文件
8. -s file        --文件大小为非0为真,可以判断文件是否为空
9. -e file        --如果文件存在为真

使用示例:

root@sparkslave02:~/ShellLearning/Chapter13# vim if03.sh
root@sparkslave02:~/ShellLearning/Chapter13# chmod a+x if03.sh 
#判断文件是否存在
if [ -f if03.sh ]
then
   echo "if03.sh exists!!"
fi
#判断目录是否存在
if [ -d ../Chapter13 ]
then
   echo "directory Chapter13 exists!!"
fi

root@sparkslave02:~/ShellLearning/Chapter13# ./if03.sh 
if03.sh exists!!
directory Chapter13 exists!!

(4)逻辑判断

逻辑判断主要有下面三个命令

1. -a     --与
2. -o     --或
3. !      --非

使用示例:

root@sparkslave02:~/ShellLearning/Chapter13# vim if04.sh
#判断if04.sh文件与目录Chapter13是否同时存在,同时存在则为真
if [ -f if04.sh -a -d ../Chapter13 ]
then
   echo "file if04.sh and directory Chapter13  both exists!!!"
fi

root@sparkslave02:~/ShellLearning/Chapter13# chmod a+x if04.sh 
root@sparkslave02:~/ShellLearning/Chapter13# ./if04.sh 
file if04.sh and directory Chapter13  both exists!!!

(5)if [] then else fi的用法

前面给出的例子都是if [] then fi的形式,这里再给出if [] then else fi的用法

root@sparkslave02:~/ShellLearning/Chapter13# vim if05.sh
i=7
if [ $i -lt 6 ]
then
  echo "i is less than 6"
else
  echo "i is great than or equal  6"
fi

root@sparkslave02:~/ShellLearning/Chapter13# chmod a+x if05.sh 
root@sparkslave02:~/ShellLearning/Chapter13# ./if05.sh 
i is great than or equal  6

(6)if [] then elif then else fi的用法

多种判断,看示例代码就能明白:

root@sparkslave02:~/ShellLearning/Chapter13# cp if05.sh if06.sh
root@sparkslave02:~/ShellLearning/Chapter13# vim if06.sh
i=7
if [ $i -le 6 ]
then
  echo "i is less than 6"
elif [ $i -eq 7 ]
then
  echo "i equal 7"
else
  echo "i is great than 7"
fi

root@sparkslave02:~/ShellLearning/Chapter13# ./if06.sh 
i equal 7

## 3. until循环控制结构##

语法格式:

until condition
  do
     command
 done

使用示例:

root@sparkslave02:~/ShellLearning/Chapter13# vim until01.sh
i=0
until [ $i -gt 2 ]  
 do
 let i+=1
 echo "i=$i"  
done

root@sparkslave02:~/ShellLearning/Chapter13# chmod a+x until01.sh 
root@sparkslave02:~/ShellLearning/Chapter13# ./until01.sh 
i=1
i=2
i=3
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
16天前
|
Unix Linux Shell
linux入门!
本文档介绍了Linux系统入门的基础知识,包括操作系统概述、CentOS系统的安装与远程连接、文件操作、目录结构、用户和用户组管理、权限管理、Shell基础、输入输出、压缩打包、文件传输、软件安装、文件查找、进程管理、定时任务和服务管理等内容。重点讲解了常见的命令和操作技巧,帮助初学者快速掌握Linux系统的基本使用方法。
54 3
|
2月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
226 73
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
83 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
机器学习/深度学习 Linux 编译器
Linux入门3——vim的简单使用
Linux入门3——vim的简单使用
58 1
|
1月前
|
Linux Shell Windows
Linux入门1——初识Linux指令
Linux入门1——初识Linux指令
26 0
Linux入门1——初识Linux指令
|
1月前
|
存储 数据可视化 Linux
Linux 基础入门
Linux 基础入门
|
1月前
|
Linux Go 数据安全/隐私保护
Linux入门2——初识Linux权限
Linux入门2——初识Linux权限
26 0
|
2月前
|
存储 Linux 开发工具
如何进行Linux内核开发【ChatGPT】
如何进行Linux内核开发【ChatGPT】
|
3月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
44 6
|
3月前
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
50 5