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

简介: 本节主要内容shell脚本调试shell函数shell控制结构初步1. shell脚本调试当脚本出错时,需要对脚本进行调试,学会脚本调试是每个linux系统使用者必备技能。shell脚本调试无需任何额外的工具,只需要要在脚本文件前加-x选项即可,创建debug.sh文件,内容如下:#!/bin/bash#Filename: debug.shech

本节主要内容

  1. shell脚本调试
  2. shell函数
  3. shell控制结构初步

1. shell脚本调试

当脚本出错时,需要对脚本进行调试,学会脚本调试是每个linux系统使用者必备技能。shell脚本调试无需任何额外的工具,只需要要在脚本文件前加-x选项即可,创建debug.sh文件,内容如下:

#!/bin/bash
#Filename: debug.sh
echo "scripting"
echo "debuging"
ls +

使用bash -x 命令进行脚本调试

root@sparkslave02:~/ShellLearning/Chapter12# bash -x debug.sh 
+ echo scripting
scripting
+ echo debuging
debuging
+ ls +
ls: cannot access +: No such file or directory

-x选项将shell脚本每一行命令及执行结果打印输出,如此便能帮助开发人员快速定位到出错的脚本位置。如果代码量比较大或者脚本开发人员知道代码出错的大致位置,则可以使用set -x; set +x;命令进行局部调试,如

#!/bin/bash
#Filename: debug2.sh
for i in {1..6}
do
set -x
//set -x表示跟在该命令后的脚本输出调试信息
echo $i
//set +x表示从此处禁用调试
set +x
done
echo "Script executed"

上面的代码意味着,只会打印输出echo $i,具体调试信息输出如下:

root@sparkslave02:~/ShellLearning/Chapter12# ./debug2.sh 
+ echo 1
1
+ set +x
+ echo 2
2
+ set +x
+ echo 3
3
+ set +x
+ echo 4
4
+ set +x
+ echo 5
5
+ set +x
+ echo 6
6
+ set +x

除bash -x命令进行脚本调试之外,还可以在脚本的第一行添加-xv命令,使得脚本默认进行调试,例如:

//加-xv选项,使脚本执行时会打印输出调试信息
#!/bin/bash -xv
#Filename: debug.sh
for i in {1..6}
do
set -x
echo $i
set +x
done
echo "Script executed"
~                       

2. shell函数

同样,同c、c ++等编程语言一样,shell中可以定义函数,函数的定义格式如下

function fname()
{
   shell脚本语句;
}

vim命令创建functionDemo.sh脚本文件

root@sparkslave02:~/ShellLearning/Chapter12# vim functionDemo.sh

#定义一个函数fname
function fname(){
   #输出第一个参数
   echo $1
   #输出函数所在文件名
   echo $0
   #输出所有参数
   echo $@
}
#将函数中传入两个参数
fname "arg1" "args"

执行结果:

root@sparkslave02:~/ShellLearning/Chapter12# ./functionDemo.sh 
arg1
./functionDemo.sh
arg1 args

3. shell控制结构初步

同其它编程语言一样,shell也有自己的控制结构,包括for循环、while循环、until循环,if语句等。本小节先介绍for循环的使用,for循环的用法非常多,下面给出四个最为常用的for循环用法

(1)for i in $(seq 10)

root@sparkslave02:~/ShellLearning/Chapter12# vim forloop.sh
for i in $(seq 10)
do
echo $i
done

root@sparkslave02:~/ShellLearning/Chapter12# chmod a+x forloop.sh 
root@sparkslave02:~/ShellLearning/Chapter12# ./forloop.sh 
1
2
3
4
5
6
7
8
9
10

(2) for((i=1;i<=10;i++))

for((i=2;i<=10;i++))
do
echo $i
done

(3)for i in ls

root@sparkslave02:~/ShellLearning/Chapter12# vim forloop3.sh
for i in `ls`
do
echo $i
done

root@sparkslave02:~/ShellLearning/Chapter12# chmod a+x forloop3.sh
root@sparkslave02:~/ShellLearning/Chapter12# ./forloop3.sh 
debug2.sh
debug.sh
forloop2.sh
forloop3.sh
forloop.sh
functionDemo.sh

(4)for i in ${arr[*]}

root@sparkslave02:~/ShellLearning/Chapter12# vim forloop4.sh
arr=(0 1 2 3)
for i in ${arr[*]}
do
echo ${arr[i]}
done

root@sparkslave02:~/ShellLearning/Chapter12# ./forloop4.sh 
0
1
2
3
相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
1078 9
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
1132 2
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
1529 1
|
网络协议 Shell Linux
【Linux】shell编程基础(超详细,入门看这一篇就够了)(下)
【Linux】shell编程基础(超详细,入门看这一篇就够了)(下)
301 0
|
Java Shell Linux
【Linux】shell编程基础(超详细,入门看这一篇就够了)(上)
【Linux】shell编程基础(超详细,入门看这一篇就够了)
1439 0
|
存储 Shell C语言
shell脚本 编程 变量 基本入门(详解)
shell脚本 编程 变量 基本入门(详解)
391 1
|
Java Shell Linux
shell(一)shell编程入门
开始学习shell编程之前,我先啰嗦几句,作为一个web开发工作者,在部署网站的时候不可避免的要使用linux服务器。 对于大部分同学来说,配置linux服务器的环境是一件很难的事情,包括刚开始接触linux的我也是一样的。 最开始的时候也是碰到了不少坑,走了很多弯路。后来有了第一篇关于服务器环境配置的教程《Centos7.6配置lnmp》关于这篇教程纯粹就是我一点一点试出来的。在百度上各种查,把好用的部分整理在了一起。里边也包含了很多东西,包括yum的配置,nginx的配置文件编写。以上的东西,惭愧点说,我是看不懂的。反正好用了就行了呗。
334 1
|
关系型数据库 MySQL Shell
Shell编程入门加案例之Linux的Mysql数据库定时备份
设置每天凌晨2点自动执行上面的脚本。 使用crontab创建任务:crontab -e
525 1
|
机器学习/深度学习 Unix Shell
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
574 0