大数据学习(二), shell
一:shell案例
1.1:单引号和双引号的区别 " " ' '
对于常规的字符串定义变量值应添加双引号,并且等号后不能 有空格,需要强引用的,则需要单引号,需要命令引用的使用反引号。
单引号:所见即所得,即输出时会将单引号内的所有内容都原样输出,或者描述为单引号里面看到的什么就输出什么,这成为强引用。
双引号:输出双引号的所有内容;如果内容中有命令(要反引)、变量、特殊转义,会先把变量、命令、转义字符解析出结果,然后在输出最终内容,这称为弱引。
反引号:一般用于命令,执行的时候命令会被执行,相当于$(),赋值和输出都要用反引号引起来。
1.2:字符串运算符
下面列出常用的字符串运算符,假定变量a为“abc”,变量b为“efg”
| 运算符 | 说明 | 举例 |
| = | 检测两个字符是否相等,相等返回true | [ $a = $b ] 返回 false |
| != | 检测两个字符串是否相等,不相等返回 true | [ $a != $b ] 返回 true |
| -z | 检测字符串长度是否为0,为零则返回true | [ -z $a ] 返回 false |
| -n | 检测字符串长度是否不为0,不为零则返回true | [ -n "$a" ] 返回 true |
| $ | 检测字符串是否为空,不为空返回 true | [ $a ] 返回 true |
1.3:文件检测运算符
| 操作符 | 说明 | 举例 |
| -d file | 检测文件是否是目录,如果是,则返回true | [ -d $file ] 返回false |
| -f file | 检测文件是否是普通文件,如果是,则返回true | [ -f $file ] 返回true |
for file in /root/* do if [ -f $file ] then echo $file fi done
1.4:${ } :变量替换

[root@localhost log]# var=/dir1/dir2/file.txt [root@localhost log]# echo ${var##*/} file.txt [root@localhost log]# echo ${var%/*} /dir1/dir2
1.5:判断字符和数字
1.5.1:方法一,判断字符串、正数、
if [ "$1" -eq 0 ] 2>/dev/null then echo "输入0" elif [ "$1" -gt 0 ] 2>/dev/null then echo "输入正数" elif [ "$1" -lt 0 ] 2>/dev/null then echo "输入负数" else echo '输入字符' fi /dev/null : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),
读取它则会立即得到一个EOF。 在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,
或作为用于输入流的空文件。当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。
1.5.2:正则
#!/bin/bash read -p "please input a number: " number if [[ $number =~ ^[0-9]+$ ]] || [[ $number =~ ^-[0-9]+$ ]];then echo "correct" else echo "error" fi
2:shell函数
- 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数
- 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。
demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕
3.linux定时任务 crontab
crontab 定时任务的守护进程,精确到分
crontab [选项]
- -e : 编辑crontab 定时任务
- -l :查询crontab任务
- -r : 删除当前用户所有的crontab任务
说明:
* * * * * 命令
分钟 小时 天 月 星期 命令
| 项目 | 含义 | 范围 |
| 第一个* | 一个小时当中的第几分钟 | 0-59 |
| 第二个* | 一天当中的第几个小时 | 0-23 |
| 第三个* | 一个月当中的第几天 | 1-31 |
| 第四个* | 一年当中的第几个月 | 1-12 |
| 第五个* | 一周当中的星期几 | 0-7(0和7都代表星期日) |
| 特殊符号 | 含义 |
| * | 代表任何时间,比如第一个*就代表一个小时中每分钟都执行一次 |
| , | 代表不连续的时间,如“0 8,12,16 * * * 命令”,就代表每天8点0分,12点0分,16点0分都执行一次命令 |
| - | 代表连续的时间范围。比如“0 5 * * 1-6 命令” 代表在周一带周六的凌晨5点0分执行命令 |
| */n | 代表每隔多久执行一次,比如“ */10 * * * * 命令” 代表每隔十分钟就执行一次命令 |
例如:
| 时间 | 含义 |
| 45 55 * * * 命令 | 每天22点45分执行命令 |
| 0 17 * * 1 命令 | 每周1的17点整执行命令 |
| 0 5 1,15 * * 命令 | 每月1号和15号的凌晨5点0分执行命令 |
| 40 4 * * 1-5 命令 | 每周一到周五的4点40分执行命令 |
我有一杯酒,足以慰风尘。

浙公网安备 33010602011771号