前言
记录在学习大数据技术中的学习笔记
目录
一、shell介绍
shell是用户与Linux操作系统沟通的桥梁
shell脚本文件后缀通常是.sh
shell脚本的第一行内容是:#!/bin/bash
注意:其他行以#开头的表示注释
二、第一个shell脚本
创建脚本:vi hello.sh
#!/bin/shell
# hello word
echo hello world
执行脚本的两种方式
1、bash hello.sh
2、sh hello.sh
添加执行权限
chmod u+x hello.sh
添加执行权限后可以使用简化的形式执行
./hello.sh
在环境变量中配置 “.” 当前目录,可以直接使用脚本名称进行执行
hello.sh
脚本的单步执行
bash -x hello.sh
三、shell中的变量
a、了解shell变量
变量不需要声明,初始化也不需要指定类型
变量命名:只能使用数字、字母和下划线,且不能以数字开头
变量赋值是通过“=”进行赋值,在变量、等号和值之间不能出现空格!
b、本地变量
格式:VAR_NAME=VALUE
应用场景:在shell脚本中定义一些临时变量时使用,对当前shell进程的子进程及其他shell进程无效
name=1 #定义变量
echo $name#输出变量值
1
echo ${name}hello
1hello
c、环境变量
格式:export VAR_NAME=VALUE
应用场景:用于设置临时环境变量,对子shell进程有效,对其他shell进程无效
export id=001 #创建环境变量
echo $id #输出环境变量值
设置永久的环境变量需要添加到 /etc/profile文件中
d、位置变量
$0、$1、$2、……
格式:location.sh a b
位置变量相当于java中main函数args参数,可以在shell脚本中动态获取外部参数
vi location.sh #创建脚本
#location.sh #编写脚本
#!/bin/bash
echo $0
echo $1
echo $2
sh location.sh 123 456 #执行脚本
location.sh #$0 脚本的名字
123 #$1 参数1的值
456 #$2 参数2的值
e、特殊变量
$?:上一条命令的返回状态码,状态码在0~255之间 返回 0 表示成功,其他值表示失败
$#:shel脚本所有参数的个数
f、变量和引号的特殊使用
‘’:单引号不解析变量
name=1
echo $name
1
echo '$name'
$name #原样输出
“”:双引号解析变量
name=1
echo $name
1
echo "$name"
1
``:反引号执行并引用命令的执行结果echo `$name`
name=ls
echo `$name`
hello.sh
$(……):是反引号的另一种写法
name=ls
echo $($name)
hello.sh
注意:echo ' "$name" ' 和 echo " '$name' "
name=ls
echo ' "$name" '
"$name"
echo " '$name' "
'hello.sh'
四、shell循环和if判断
a、for循环
语法一:
for((i=0;i<10;i++))
do
循环体……
done
语法二:
for i in 1 2 3
do
循环体……
done
b、while循环
适用于循环次数未知,或不便于使用for直接生成较大列表时
while 测试条件
do
循环体……
done
测试条件为“真”,则进入循环,测试条件为“假”,则退出循环
测试条件
格式:
test EXPR 或者 [EXPR]中括号和表达式之间的空格不能少
整型测试:-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于)、-eq(等于)、-ne(不等于)
字符串测试:=(等于)、!=(不等于)
例子
#!/bin/bash
while [ 2 -gt 1 ] #[] 中的空格不能少
do
echo yes
sleep 1 #每循环一次,进程休息一秒
done
c、if判断
if判断之单分支 语法:
if 测试条件
then
选择分支
fi
例子1:
#a.sh
#!/bin/bash
if [ 1 -gt 2 ]
then
echo yes
fi
sh a.sh
yes
例子2:
#b.sh
#!/bin/bash
if [ $# -lt 1 ]
then
echo 无参
exit 100
fi
if [ $1 -eq 1 ]
then
echo one
fi
b.sh
无参
echo $?
100
if判断之双分支 语法:
if测试条件
then
选择分支1
else
选择分支2
fi
if判断之多分支 语法:
if测试条件1
then
选择分支1
elif测试条件2
then
……
else
选择分支n
fi
五、shell扩展
后台运行脚本
nohup sh 脚本文件 &
查看脚本是否在运行(也可以看到脚本的进程号)
ps -ef | grep 脚本名
停止脚本
kill 脚本进程号
标准输出(1)、标准错误输出(2)、重定向(> 覆盖 或者 >> 追加)
六、linux中的定时器crontab
crontab作用于周期性被执行的命令
* * * * * user-name command
- * 分钟(0-59)
- * 星期中的第几天(0-6)
- * 月份(1-12)
- * 月中的第几天(1-31)
- * 小时(0-23)
查看crontab服务状态(默认开启的)
systemctl status crond
启动/停止crontab服务
systemctl start/stop crond
添加定时任务
vi /etc/crontab
查看crontab执行日志
tail -f /var/log/cron