shell脚本开发及定时任务配置

参考:https://www.jb51.net/article/256177.htm
一、解释器
shell脚本解释器必须放在第一行,#!/解释器。也可以不引用,默认为/bin/bash,可以用$ echo $SHELL查看shell脚本的解释器
linux常用解释器
/bin/sh(为bash的符号引用,和bash没有区别)
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/expect(交互命令使用)
二、变量
1、环境变量
可以使用env查看系统当前的环境变量。
如PATH、USER、HOSTNAME等
2、入参(脚本入参、函数入参)
$#    传递到脚本的参数个数
$*    以一个单字符串显示所有向脚本传递的参数。
$$    脚本运行的当前进程ID号
$!    后台运行的最后一个进程的ID号
$@    与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-    显示Shell使用的当前选项,与set命令功能相同。
$?    显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$n    第n个参数
3、自定义变量
定义方法:变量名=值,当值包含特殊符号,如空格等时要使用引号(单双都可以)引起来,只允许字母下划线开头,且区分大小写。
调用方法:$变量名或${变量名},当和其他字符串直接使用时,必须使用${变量名}。如${变量名}123
4、变量类型
所有数据都是以字符串形式存储,(数字或boolean 如可以 if "false")。
字符串在定义时可以用双引号、单引号或不用引号。
字符串函数:
${#a} 获取字符串长度
${a:0:5}截取字符串
${a/wode/nide}替换第一个字符串 ${a//wode/}替换所有wode
$a$b字符串拼接
$((${a}+${b}))整数运算
字符串转数组,空格分隔的字符串($a),其他分隔符可以用${a//wode/}替换为空格,如(${str//,/ })
数组:
${b[2]}获取第3个元素
${b[@]} 获取所有元素
${#b[@]}获取数组长度
三、注释
# 开头,单行注释
< 
  
#!/usr/bin/bash
#本程序实现手动输入两个数,并且判断其大小。by:浩道linux
#提示分别输入两个要判断的数
echo "请输入两个数:"
read -p "请输入第一个数:" a
read -p "请输入第二个数:" b
if [ $a -gt $b ];then
    echo "第一个数大于第二个数!"
elif [ $a -lt $b ];then
    echo "第二个数大于第一个数!"
else
    echo "第一个数等于第二个数!"
fi


#if [[ $a > $b ]] ; then echo $a; else echo puss; fi 可以不还行,但要用分号隔开
#使用> < && || 时条件必须使用[[]]阔起来。
2、case分支

case $a in
 1)
 echo yes ;;
 2)
 echo no ;;
 esac


# case $c in 1) echo yes ;; 2) echo no ;; *) echo erro ;; esac 可以不换行
3、for循环
a=(a b c d e)
for i in ${a[@]}; 
do 
echo $i; 
done
六、函数
1、特殊函数

2、自定义函数
sum 1 2 5 5 #可以在函数前调用
a=$?
echo $a
function sum(){
sum=0
for n in $@
do
((sum+=n))
done
return $sum
}
 

七、特殊命令
八、抽取项目日志到hive表的shell脚本案例
#!/bin/bash 
hosts=$1
port=$2
username=$3
password=$4
pathname=$5
filename=$6
src_file=$5$6
default_file=$7
dest_file=$6
filter_file="temp_"$6
filter_word=$8
table_name=$9
partition=${10}
echo "user name = ${USER}"
pwd
array=(${hosts//,/ })
for host in ${array[@]}
do
set +e
/usr/bin/expect <<-EOF
spawn scp -P $port  $username@$host:$pathname{\*/$filename,$default_file\} .
 expect {
"(yes/no)?"
  {
    send "yes\n"
    expect "*assword:" { send "$password\n"}
  }
 "*assword:"
  {
    send "$password\n"
  }
}
expect "100%"
expect eof
EOF
set -e
if [[ ! -f "$dest_file" ]]; then
  cat $default_file | grep "${filter_word}"  >> $filter_file
  echo "获取原始文件"
else
 cat $dest_file | grep "${filter_word}"  >> $filter_file
 rm -f $dest_file
fi
done
hive -e "load data local inpath '${filter_file}' overwrite into table ${table_name} partition ( dt = '${partition}')";
rm -f $filter_file
echo Done!!!

九、设置定时任务

crontab -u //设定特定用户的定时服务
crontab -l //列出当前用户定时服务内容
crontab -r //删除当前用户的定时服务
crontab -e //编辑当前用户的定时服务 会进入编辑页面

添加:

0 0-3 * * *  脚本文件

你可能感兴趣的:(shell,数据采集,linux)