shell脚本

shell 之 数组

有些话、适合烂在心里 提交于 2019-12-02 03:31:11
函数传参使用场景示例,需求描述:写一个脚本,实现nginx服务的启动、停止、重启。 [root@shell day06]# cat nginx.sh #!/bin/bash source /etc/init.d/functions if [ $# -ne 1 ];then echo "Usage: $0 {start|stop|status|reload|restart}" exit fi rc=$1 retu() { if [ $? -eq 0 ];then action "Nginx is $rc 成功!" /bin/true else action "Nginx is $rc 失败!" /bin/false fi } start() { if [ ! -f /var/run/nginx.pid ];then /usr/sbin/nginx retu else echo "Nginx 服务正在运行....." fi } stop() { if [ -f /var/run/nginx.pid ];then /usr/sbin/nginx -s stop retu else echo "Nginx 服务不在运行......" fi } reload() { if [ -f /var/run/nginx.pid ];then /usr/sbin/nginx -s reload

Shell多进程执行任务

筅森魡賤 提交于 2019-12-02 03:04:41
展示代码 #!/bin/bash trap "exec 1000>&-;exec 1000<&-;exit 0" 2 # 分别为 创建管道文件,文件操作符绑定,删除管道文件 mkfifo testfifo exec 1000<>testfifo rm -rf testfifo # 对文件操作符进行写入操作。 # 通过一个for循环写入10个空行,这个10就是我们要定义的后台线程数量。 for ((n=1; n<=10; n++)) do echo >&1000 done # 创建一个备份目录 if [[ ! -d back ]]; then mkdir back fi # 开始时间记录 start=`date "+%s"` # 获取URL总数,如果总数为0,直接退出 total=`cat urls | wc -l` if [[ $total == 0 ]]; then echo 'urls总数为空' exit 0 fi # 遍历URLS文件,开始执行下载 for ((i=1;i<=$total;i++)) do { # 从testfifo中读取一行 read -u1000 { # 增加尝试次数,最大5次 for j in {1..5} do # 判断单独进程文件目录是否存在,不存在则创建目录 download_dir=audio"$i" if [[ ! -d $download

Flink整合oozie shell Action 提交任务 带kerberos认证

房东的猫 提交于 2019-12-02 03:03:00
最近这段时间一直在忙新集群迁移,上了最新的cdh6.3.0 于是Flink 提交遇到了许多的问题 还好有cloudera License 有了原厂的帮助和社区的伙伴,问题解决起来快了不少,手动滑稽 集群具体情况是,cdh6.3.0+Flink1.8.1,整个数据平台全部组件都上了kerberos和ldap因为要过认证,所以任务提交方法我们选择统一oozie提交任务 并且因为kerberos认证,还需要Flink perjob 需要单独的keytab,才能细腻度的控制权限,因为我们现在部门之间计算资源的划分是通过yarn资源队列 但是现在Flink支持的不是很好,目前只能在配置文件中配置一个keytab,job启动都去这个拉这个keytab复制到自己的contain里面 但是Flink第一提交方式还是希望能够通过oozie提交job 由于oozie没有天生支持Flink提交,所以只能选择oozie shell action 的方式提交job 在Flink搭建好以后开始提交任务,用oozie shell提交 #!/bin/bash flink run -m yarn-cluster flinktest.jar 马上 Duang flink command not find 改成命令绝对路径以后! 还是 Duang org.apache.flink.client.deployment

shell中函数的使用

[亡魂溺海] 提交于 2019-12-02 02:10:07
  函数是一个脚本代码块,你可以对它进行自定义命名,并且可以在脚本中任意位置使用这个函数。如果想要这个函数,只要调用这个函数的名称就可以了。使用函数的好处在于模块化以及代码可读性强。 (1).函数的创建语法   函数的创建方法一: function 函数名称 { 命令 }   函数的创建方法二: 函数名称() { 命令 }    注意:函数名称在当前脚本必须唯一。   调用函数的方法: 函数名称 参数1 参数2 ......    调用函数时可以传递参数,函数中使用$1、$2......来引用传递的参数。 (2).函数的使用实例   实例1: [root@youxi1 ~]# vim a.sh #!/bin/bash function fun1 { echo "hello world" } fun2() { echo $[$1+$2] } fun1 fun2 1 2 [root@youxi1 ~]# sh a.sh hello world 3   实例2: 如果存在相同名称的函数,以最后一个为准 [root@youxi1 ~]# vim b.sh #!/bin/bash function fun1 { echo "hello world" } fun1() { echo "This is rewrite" } fun1 [root@youxi1 ~]# sh b.sh This

shell 流程控制

时光总嘲笑我的痴心妄想 提交于 2019-12-02 02:01:03
场景实践二:查看磁盘/分区当前使用状态,如果使用率超过80%则报警发邮件 [root@shell shell]# cat disk.sh #!/bin/bash #定义变量 Disk_Use=$(df -h |awk '/\/$/{print $(NF-1)}') #根据磁盘的使用率情况进行判断 if [ ${Disk_Use/\%/} -gt 7 ];then echo "当前主机$(hostname) 磁盘根分区使用率不正常,使用率为:$Disk_Use" else echo "当前主机$(hostname) 磁盘根分区使用率正常,使用率为:$Disk_Use" fi [root@shell shell]# cat disk.sh #!/bin/bash #定义变量 [ -f /etc/init.d/functions ] && source /etc/init.d/functions Disk_Use=$(df -h |awk '/\/$/{print $(NF-1)}') #根据磁盘的使用率情况进行判断 if [ ${Disk_Use/\%/} -gt 80 ];then action "当前主机$(hostname) 磁盘根分区使用率不正常,使用率为:$Disk_Use" /bin/false else action "当前主机$(hostname) 磁盘根分区使用率正常

第三章 Shell流程控制

旧巷老猫 提交于 2019-12-02 01:53:16
第三章 Shell流程控制 1. 流程控制语句if基本概述 01. 单分支结构 if [ 如果你有房 ];then 我就嫁给你 fi #示例 [root@gjy ~/shell]# cat if-1.sh #!/usr/bin/bash if which ls;then echo "ok" fi #执行脚本 [root@gjy ~/shell]# sh if-1.sh /usr/bin/ls ok 02. 双分支结构 if [ 如果你有房 ];then 我就嫁给你 else 再见 fi #示例 [root@gjy ~/shell]# cat if-2.sh #!/usr/bin/bash if [ $# -ne 1 ];then echo "请输入一个参数" exit fi if grep "$1" /etc/passwd;then echo "ok!" else echo "error!" fi #执行脚本 [root@gjy ~/shell]# sh if-2.sh root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin ok! 03. 多分支结构 if [ 如果你有钱 ];then 我就嫁给你 elif [ 你有房 ];then 我就嫁给你 elif [ 你很努力能吃苦

第三章 Shell流程控制

我们两清 提交于 2019-12-02 01:49:54
1. 流程控制语句if基本概述 01. 单分支结构 if [ 如果你有房 ];then 我就嫁给你 fi #示例 [root@cc ~/shell]# cat if-1.sh #!/usr/bin/bash if which ls;then echo "ok" fi #执行脚本 [root@cc ~/shell]# sh if-1.sh /usr/bin/ls ok 02. 双分支结构 if [ 如果你有房 ];then 我就嫁给你 else 再见 fi #示例 [root@cc ~/shell]# cat if-2.sh #!/usr/bin/bash if [ $# -ne 1 ];then echo "请输入一个参数" exit fi if grep "$1" /etc/passwd;then echo "ok!" else echo "error!" fi #执行脚本 [root@cc ~/shell]# sh if-2.sh root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin ok! 03. 多分支结构 if [ 如果你有钱 ];then 我就嫁给你 elif [ 你有房 ];then 我就嫁给你 elif [ 你很努力能吃苦 ];then 我们试试 else

技术干货:Linux Shell 编程基础,看这一篇就够了!

耗尽温柔 提交于 2019-12-02 00:30:10
本文摘要 本文主要介绍 Linux Shell 编程的基础知识,包含下面 8 个方面 : Shell 编程概述 Shell 关键字 Shell 变量 Shell 运算 Shell 语句 Shell 函数 Shell 调试 Shell 易错点 下面一一介绍。 Shell 编程概述 在 Linux 下有一门脚本语言叫做: Shell 脚本 ,这个脚本语言可以帮助我们简化很多工作,例如编写自定义命令等,所以还是很有必要学习它的基本用法的,一个简单的 hello.sh 脚本像下面这样, 第一行 #!/bin/bash 标识该 Shell 脚本由哪个 Shell 解释 : #!/bin/bash echo "Hello World!" 赋予权限才可以执行 : # 赋予可执行权限 chmod a+x hello.sh # 执行 ./hello.sh # 结果 Hello World! Shell 的编写流程: 1. 编写 Shell 脚本 2. 赋予可执行权限 3. 执行,调试 下面来介绍具体的语法。 Shell 关键字 常用的关键字如下: 1. echo:打印文字到屏幕 2. exec:执行另一个 Shell 脚本 3. read:读标准输入 4. expr:对整数型变量进行算术运算 5. test:用于测试变量是否相等、 是否为空、文件类型等 6. exit:退出 看个例子: #!/bin

shell编程:expr的数学运算

元气小坏坏 提交于 2019-12-02 00:15:45
运算符两种方式 方式一:expr $num1 operator $num2 方式二:$(($num1 operator $num2)) (方式二在运算符“=”时候会出错) 1+2.sh 这个代码有点问题,尚没有解决 while true do read -p "please input a positive number:" num expr $num + 1 &> /dev/null if [ $? -eq 0 ];then if [ `expr $num \> 0` -eq 1 ];then for((i=1;i<=$num;i++)) do sum=`expr $num + $i` done echo "1+2+3+...+$num = $sum" exit fi fi echo "error,input enlegal" continue done bc.sh 脚本中运用bc命令 #!/bin/bash # read -p "num1:" num1 read -p "num2:" num2 echo "scale=3;$num1/$num2" | bc 来源: https://www.cnblogs.com/soymilk2019/p/11722625.html

centos crontab定时任务用法

徘徊边缘 提交于 2019-12-01 23:18:06
一、安装crond服务 yum -y update yum -y install cronie yum-cron 二、crontab任务语法 crontab任务配置基本格式: * *  *  *  *  command 第1列表示分钟0~59 每分钟用 * 或者 */1 表示 第2列表示小时0~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0,7都可表示星期天) 第6列要运行的命令或执行shell脚本 综合起来就是: 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)  命令 从上面可以看出,crontab最小的时间单位: 1分钟。如果要每30秒执行一次脚本,要么写个小脚本,要么在crontab增加延迟。 例子:crontab中增加延迟30秒来实现 a、crontab -e,添加如下内容: */1 * * * * sh && echo "dd" >> /logs/cron-cc.log */1 * * * * sleep 30 && echo "cc" >> /logs/cron-cc.log b、重启crond systemctl reload crond systemctl restart crond c、查看当前用户定时任务 crontab -l d、通过日志查看是否生效 tail