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

简介: 本节主要内容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的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
6月前
|
人工智能 分布式计算 大数据
大数据≠大样本:基于Spark的特征降维实战(提升10倍训练效率)
本文探讨了大数据场景下降维的核心问题与解决方案,重点分析了“维度灾难”对模型性能的影响及特征冗余的陷阱。通过数学证明与实际案例,揭示高维空间中样本稀疏性问题,并提出基于Spark的分布式降维技术选型与优化策略。文章详细展示了PCA在亿级用户画像中的应用,包括数据准备、核心实现与效果评估,同时深入探讨了协方差矩阵计算与特征值分解的并行优化方法。此外,还介绍了动态维度调整、非线性特征处理及降维与其他AI技术的协同效应,为生产环境提供了最佳实践指南。最终总结出降维的本质与工程实践原则,展望未来发展方向。
379 0
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
973 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
7月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
407 32
|
9月前
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
501 79
|
9月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
2465 77
|
8月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
201 18
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
266 0
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
263 0
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
311 0
|
10月前
|
人工智能 DataWorks 大数据
大数据AI一体化开发再加速:DataWorks 支持GPU类型资源
大数据开发治理平台 DataWorks 的Serverless资源组支持GPU资源类型,以免运维、按需付费、弹性伸缩的Serverless架构,将大数据处理与AI开发能力无缝融合。面向大数据&AI协同开发场景,DataWorks提供了交互式开发和分析工具Notebook。开发者在创建个人开发环境时,可以选择GPU类型的资源作为Notebook运行环境,以支持进行高性能的计算工作。本教程将基于开源多模态大模型Qwen2-VL-2B-Instruct,介绍如何使用 DataWorks Notebook及LLaMA Factory训练框架完成文旅领域大模型的构建。
704 24