Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言 ,Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
创建一个文件:vim hello.sh
文件头为:#!/bin/bash
执行bash脚本的第一种方法:直接运行 sh xxx.sh
执行bash脚本的第二种方法:设置可执行权限
chmod 777 xxx.sh,之后就可以运行了,或者 chmod u+x xxx.sh
相对路径和绝对路径都可以执行
shell的变量:(分为系统变量和自定义变量)
系统变量:$HOME $PWD $SHELL $USER
显示当前shell中所有变量: set | more
自定义变量
定义变量可以撤销变量unset
定义一个静态变量,不能unset
变量命名
定义变量的规则:
1:只能使用数字,字母和下划线,且不能以数字开头
2:变量名区分大小写,变量名称一般为大写
3:建议变量的名称要通俗易懂
注意:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格。 显示变量值使用echo命令(类似于java中的system.out) ,加上$引用变量名,也可以使用${变量名}
将变量的返回值赋给变量
1、A=`ll /home` 反引号,运行里面的命令,并把结果返回给变量A
2、A=$(date) 等价于反引号(推荐使用)
引号:
单引号:按原字符串输出
双引号:可以引用变量,拥有特殊含义的内容
拼接:连续获取变量
注意:
如果有多个引号,连续的形成一对
引号中使用其他引号,其他引号做字符串使用
环境变量:
位置参数变量:
注意:位置变量直接$引用只能识别一位(只能识别$后第一位数字)${10}
预定义变量:
数组:
shell中的数组和一些开发语言的数组概念基本一致,有下标,有元素
用括号来表示数组,数组元素用"空格"符号分割开。
定义数组的一般形式为:
数组名=(值1 值2 ... 值n) 例如: array_name=(value0 value1 value2 value3)
字符串
获取长度
格式:
${#变量}
截取:
格式:
${变量:开始位置:长度}
注意:
${str::5}:从0获取5个
${str:0}:从0获取到末尾
替换单个
格式:
${变量/旧/新}
注意:从左向右替换第一个
替换所有
格式:
${变量//旧/新}
注意:替换不会再原字符上进行修改,想要修改原字符串只能从新赋值
删除
从头开始删除
${变量#表达式}:匹配第一个删除
${变量##表达式}:匹配最后一个删除
从尾开始删除
${变量%表达式}:匹配第一个删除
${变量%%表达式}:匹配最后一个删除
注意:从未开始删除,表达式还是从左向右去写
删除不会再原字符上进行修改,想要修改原字符串只能从新赋值
运算符
算术运算符
bash不支持简单的数学运算,可以通过命令实现expr
格式1:
`expr 值 + 值`
注意:符号两边需要加上空格
格式2:
$[值+值]或$((运算式))
练习:求两个参数的和
比较运算符: > < >= <=....
格式:
$[值符号值](符号两边空格加不加无所谓)
注意:比较的结果用1(true)和0(false)表示
逻辑运算符: &/and |/or !/not
例如:
判断条件的写法
[] 括号和符号两边加空格
[] 使用符号需要加\转义符
[[]] 括号和符号两边加空格
(弃用了)
(()) 真不能使用字母
只能使用符号 用变量时不需要加$
符号含义:
1. eq (equal的缩写),表示等于为真
2. ne (not equal的缩写),表示不等于为真
3. gt (greater than的缩写),表示大于为真
4. ge (greater&equal的缩写),表示大于等于为真
5. lt (lower than的缩写),表示小于为真
6. le (lower&equal的缩写),表示小于等于为真
test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
if语句:
case语句:
$*和$@的区别
一个看成整体,一个单独看
while语句
read读取控制台
函数:
自定义函数:
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
shell日期:
获取当前日期时间
date +"%Y-%m-%d %H:%M:%S"
格式化日期时间:
date -d today +"%Y-%m-%d %H:%M:%S"
加减日期时间
date +%Y%m%d //显示前天年月日
date +%Y%m%d --date="+1 day" //显示前一天的日期
date +%Y%m%d --date="-1 day" //显示后一天的日期
date +%Y%m%d --date="-1 month" //显示上一月的日期
date +%Y%m%d --date="+1 month" //显示下一月的日期
date +%Y%m%d --date="-1 year" //显示前一年的日期
date +%Y%m%d --date="+1 year" //显示下一年的
shell重定向
command >> file 将输出以追加的方式重定向到 file
command > file 将输出重定向到 file
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
标准输入文件(stdin):stdin的文件描述符为0,默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,向stderr流中写入错误信息。
定时器:
查看定时任务是否执行了,看日志
tail -f /var/log/cron
执行脚本:
定时器
结果
关闭计时器