目录:
- Shell 介绍
- Shell 执行
- Shell 变量
- 变量的创建
- 变量的使用
- 变量的分类
- 本地变量
- 环境变量
- 局部变量
- 位置变量(参数变量)
- 特殊变量
- Shell 传递参数
- Shell 数组
- Shell 运算符
- Shell echo命令
- Shell printf 命令
- Shell test命令
- Shell 流程控制
- Shell 函数
- Shell 输入/输出重定向
- Shell 文件包含
- 定时器crontab
- ps 和jps的区别
一.运行的说明
- 普通运行
打开文本编辑器(可以使用vi/vim命令来创建文件),新建一个文件test.sh,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了。
输入一些代码,第一行一般是这样:#!/bin/bash echo "Hello World !"
"#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。
echo命令用于向窗口输出文本。- 作为可执行程序
将上面的代码保存为test.sh,并cd到相应目录:chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本
- 作为解释器参数
这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:/bin/sh test.sh /bin/php test.php
- 作为可执行程序
- 后台运行
语法:执行命令的后面加上&
例如:./test.sh &
说明:但是该命令只能在当前shell窗口(进程)中有效。关闭了窗口,该程序就结束执行。 - 让关闭窗口之后,该程序该可以继续运行
语法:nohup ./test.sh
说明:采用在多个进程之间可以同时运行的方式,会把相应的输出语句,放在执行目录下创建一个nohup.out文件 - 两者之间的结合
语法:nohup 命令 &
说明:在后台运行,且就算窗口关闭,该程序还在执行
十二.Shell 标准输入/输出/错误
作用:有时候我们需要将某个shell 中输出内容进行记录(保存)。
不需要标准输出的时候:在启动某个程序时,有可能会报一些不兼容、启动失败的输出,这些输出在启动的时候,事先在已经使用的时候,就不需要记录,所以直接将错误信息丢弃。
十四.定时器 crontab
linux下的定时任务
- 编辑使用crontab -e
一共6列,分别是:分、时、日、月、周、命令 - 查看使用crontab -l
- 删除任务crontab -r
- 查看crontab执行日志
tail -f /var/log/cron
必须打开rsyslog服务cron文件中才会有执行日志(service rsyslog status)
tail -f /var/spool/mail/root(查看crontab最近的执行情况) - 查看cron服务状态
service crond status - 启动cron服务
service crond start
基本格式:
* * * * * command
分 时 日 月 周
第1列(f1)表示分钟1~59 每分钟用*或者 */1表示
第2列(f2)表示小时0~23(0表示0点)
第3列(f3)表示日期1~31
第4列(f4)表示月份1~12
第5列(f5)标识号星期0~6(0表示星期天)
第6列(f6)要运行的命令
说明:
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
当 f1 为 /n 时表示每 n 分钟个时间间隔执行一次,f2 为 /n 表示每 n 小时个时间间隔执行一次,其余类推
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
crontab的一些基本例子:
* * * * * /usr/local/hadoop/sbin/restart-all.sh
每分钟都执行一次这个脚本
30 21 * * * /usr/local/hadoop/sbin/restart-all.sh
每天的21:30都执行这个脚本
30 21 1,10,20 * * /usr/local/hadoop/sbin/restart-all.sh
每个月的1,10,20的21:30都执行这个脚本
0 6-12/3 * 12 * /usr/bin/backup
在12月内,每天的早上6点到12点中,每隔3个小时执行一次。
0 17 * * 1-5 mail -s "hi" watermelonkiwi@163.com < /tmp/maildata
每周的17:00发一份信,内容是 hi 给watermelonkiwi@163.com
0 6 * * * nohut /export/services/storm/nimbus restart > /dev/null 2 > &1
每天的早上6点启动strom的nuibus 并且将执行之后的信息发送给无底洞,不显示
十五.ps 和 jps
- ps:ps用来显示进程的相关信息
比如:ps -ef|grep java - jps :类似liunx的ps 命令,不同的ps是用来显示所有进程,而jps只显示Java进程,准确的说上显示当前用户已启动的部分Java今晨信息,信息包括进程号和简短的进程command。
jsp命令是Java的进程命令,所以需要再liunx中安装jdk