大数据之路系列之shell脚本(02)

大数据之路系列之shell脚本(02)

shell脚本的使用,以及力扣shell题练习



文章链接

链接: link


提示:以下是本篇文章正文内容,下面案例可供参考

一、创建第一个shell脚本

shell脚本的第一行内容是: #!/bin/bash
这句话相当于是一个导包语句,将shell的执行环境引入进去了。
[root@bigdata01 shell]# vi hello.sh
#!/bin/bash
# first command
echo hello world!
增加权限
chmod 777 hello.sh
执行脚本
sh hello.sh

二、加载到环境变量中

不带任何路径信息是执行不了脚本的,如果想在任何路径下都能执行脚本,需要将目录加到环境变量中。
[root@bigdata01 shell]# vi /etc/profile



export PATH=.:$PATH

刷新配置文件source /etc/profile

三、shell中的变量

1.设置获取变量

变量赋值是通过"="进行赋值,在变量、等号和值之间不能出现空格!
设置变量
name=zs
获取变量
echo ${name}

2.变量的分类

本地变量
本地变量的格式是VAR_NAME=VALUE,这种变量一般用于在shell脚本中定义一些临时变量,
只对当前shell进程有效,关闭shell进程之后就消失了,对当前shell进程的子进程和其它shell进程无效,
注意了,我们在这开启一个shell的命令行窗口其实就是开启了一个shell进程
临时环境变量
它的格式为:export VAR_NAME=VALUE
注意了,环境变量的生效范围和本地变量是不一样的,环境变量对子shell进程是有效的。

设置本地变量name
[root@VM-0-11-centos data]# name=a
设置临时环境变量name2
[root@VM-0-11-centos data]# export name2=b
进入子shell
[root@VM-0-11-centos data]# bash
获取name变量,在子shell中本地变量获取不到
[root@VM-0-11-centos data]# echo ${name}

获取临时环境变量name2,可以获取到值
[root@VM-0-11-centos data]# echo ${name2}
b
退出子shell
[root@VM-0-11-centos data]# exit

位置变量
在进行shell编程的时候,有时候我们想给shell脚本动态的传递一些参数,
这个时候就需要用到位置变量,类似于$0 $1 $2这样的,$后面的数字理论上没有什么限制,
$0脚本名称
$1 是脚本后面的第一个参数
$2是脚本后面的第二个参数
$*整体的参数

特殊变量
$? 它表示是上一条命令的返回状态码,状态码在0~255之间
这个返回状态码是0,如果失败,则是在1~255之间,不同的状态码代表着不同的错误信息
我们有时候会根据上一条命令的执行结果来执行后面不同的业务逻辑
$#参数的个数

3.变量和引号的特殊使用

首先是单引号,’’:单引号不解析变量
[root@bigdata01 shell]# name=jack
[root@bigdata01 shell]# echo '${name}'
$name

然后再看一下双引号,"":双引号解析变量
[root@bigdata01 shell]# name=jack   
[root@bigdata01 shell]# echo "${name}"
jack

还有一个特殊的引号,我们称之为反引号,
在键盘左上角esc下面的那个键,在英文输入法模式下可以打出来
[root@bigdata01 shell]# name=pwd
[root@bigdata01 shell]# echo `${name}`
/root/shell
反引号是获取到了name变量的值,然后去执行这个值

有时候我们想在变量的值外面套一层引号,该怎么写呢?
在外部包一层双引号,里面写单引号
[root@bigdata01 shell]# echo "'${name}'"
'pwd'

四、shell中的循环和判断

1.for循环

代码如下(示例):
for((i=0;i<10;i++))
do
循环体…
done

演示:
#!/bin/bash
for((i=0;i<10;i++))
do
echo $i
done
结果:
[root@bigdata01 shell]# sh for2.sh 
1
2
3

2.while循环

代码如下(示例):
while test 测试条件
do
循环体…
done

整型测试:-gt(大于)-lt(小于)-ge(大于等于)-le(小于等于)-eq(等于)-ne(不等于)
字符串测试:=(等于)!=(不等于)
演示:
[root@bigdata01 shell]# vi while1.sh
#!/bin/bash
while test 2 -gt 1
do
echo yes
sleep 1
done

结果:
[root@bigdata01 shell]# sh while1.sh 
yes
yes
yes
------------------
使用[]的格式,注意中括号左右都要有空格
[root@bigdata01 shell]# vi while2.sh 
#!/bin/bash
while [ 2 -gt 1 ]
do
echo yes
sleep 1
done
[root@bigdata01 shell]# sh while2.sh 
yes
yes
yes
...
---------------
字符串相关的测试:
#!/bin/bash
while [ "abc" = "abc" ]
do
echo yes
sleep 1
done
[root@bigdata01 shell]# sh while3.sh 
yes
yes
yes
...

3.if判断

代码如下(示例):
if 测试条件
then
选择分支
fi

演示:
[root@bigdata01 shell]# vi if1.sh 
[root@bigdata01 shell]# vi if1.sh 
#!/bin/bash
if [ $# -lt 1 ]
then
echo "not found param"
exit 100
fi

flag=$1
if [ $flag -eq 1 ]
then
echo "one"
fi
[root@bigdata01 shell]# sh if1.sh 
not found param
[root@bigdata01 shell]# echo $?
100


结果:
[root@bigdata01 shell]# sh if1.sh 1
one

3.if else判断

代码如下(示例):
if 测试条件
then
选择分支1
else
选择分支2
fi

演示:
[root@bigdata01 shell]# vi if2.sh 
#!/bin/bash
if [ $# -lt 1 ]
then
  echo "not found param"
  exit 100
fi

flag=$1
if [ $flag -eq 1 ]
then
  echo "one"
else
  echo "not support"
fi

结果:
[root@bigdata01 shell]# sh if2.sh 1
one
[root@bigdata01 shell]# sh if2.sh 2
not support

4.if else多分支判断

代码如下(示例):
if 测试条件1
then
选择分支1
elif 测试条件2
then
选择分支2

else
选择分支n
fi

演示:
[root@bigdata01 shell]# cp if2.sh  if3.sh
[root@bigdata01 shell]# vi if3.sh 
#!/bin/bash
if [ $# -lt 1 ]
then
  echo "not found param"
  exit 100
fi

flag=$1
if [ $flag -eq 1 ]
then
  echo "one"
elif [ $flag -eq 2 ]
then
  echo "two"
elif [ $flag -eq 3 ]
then
  echo "three"
else
  echo "not support"
fi


结果:
[root@bigdata01 shell]# sh if3.sh 1
one
[root@bigdata01 shell]# sh if3.sh 2
two
[root@bigdata01 shell]# sh if3.sh 3
three
[root@bigdata01 shell]# sh if3.sh 4
not support

总结 TODO

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

居高声自远,非是藉秋风

千山万水总是情,赏个一块行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值