大数据之路系列之shell脚本(02)
shell脚本的使用,以及力扣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提供了大量能使我们快速便捷地处理数据的函数和方法。