shell学习

shell定义

操作系统中有一个内壳,它主要是用来操控硬件的,而我们又不能直接去操控它,所以我们就可以在操作系统外面加一个壳,使用壳(shell)来操控内壳。shell是一个命令解释器,shell现在主要有二种语法:sh(sh和bash)和csh,而现在我们Linux中默认是使用bash,所以我们每次写脚本都要声明是bash,不声明也能执行。
在这里插入图片描述

shell脚本执行方式

shell一共有三种执行方式路径+脚本名、sh+脚本名、source+脚本名
注意:
①路径方式:在当前目录就可以直接使用./,或者使用绝对路径,但一个前提是给与他执行权限(chmod +x)才能使用;
②使用路径和sh执行的脚本不会打印直接设置的变量,除非是用export定义的变量。因为这两种方式是使用子进程执行的脚本,拿不到父进程.sh的数据,进程间数据不共享。
③export定义的变量会首先在当前进程查找数据,如果没有就会去父进程查找。

变量和字符串

声明变量可以用单引号,也可以用双引号,也可以不用引号。获取变量可以用$+变量名也可以在变量名前后加上大括号{}。
①使用加减乘除只会当作字符串连接。如str1=1,str2=2,echo $str1 + $str2结果等于1+2
②使用单引号定义的不会转义,使用双引号定义的会被转义。如str3=‘str1+2’,echo $str3=str1+2;str4=“str1+2”,echo s t r 4 = 1 + 2 。 ③ 字 符 串 拼 接 直 接 连 着 写 , 不 用 什 么 拼 接 符 号 。 ④ 使 用 str4=1+2。 ③字符串拼接直接连着写,不用什么拼接符号。 ④使用 str4=1+2使{#变量名}获取变量的长度
⑤使用${变量名 : a : b}获得变量索引a到索引b的内容,索引从0开始。

数组

定义:数组名=(值1 值2 值3)用空格隔开
读取: 数 组 名 [ 下 标 ] 下 标 使 用 @ 符 可 以 获 取 所 有 的 数 组 长 度 : {数组名[下标]} 下标使用@符可以获取所有的数组 长度: []使@{#数组名[下标]} 下标使用@符获取数组的长度,不然就获取某个下标的长度

注释

#单行注释
:<< 字符 字符 多行注释

运算符

①使用撇+expr修饰 如var = ~expr $a + $b~
②使用*时前面要加上\ 用来转义
③==和!= 判断等价关系
④关系运算:-eq相等 -ne不相等 -gt大于 -lt小于 -ge大于或等于 -le小于或等于
布尔运算: !非 -o或(条件一个true结果true) -a与(条件都是true结果才是true)
逻辑运算:&&短路与(前面是错的就不执行了) ||短路或(前面是对的就不执行了)
字符串运算: -z长度是否为0 -n长度不为0
文件测试运算:-r文件可读 -w文件可写 -x文件可执行 -f文件是普通文件 -d文件是目录 -s文件不为空 -e文件存在
打印数据:\n换行 \变量\显示转义 \c不换行 >文件名(覆盖)把结果放到文件名里面 date显示日期
⑤判断后面用中括号[]来写条件

流程控制

if

if [条件1]
then
	结果1
elif [条件2]
	结果2
else
	结果3
fi

case

case 变量 in
	结果1) echo '结果1'
	;;   #相当于Java中的break;
	结果2) echo '结果2'
	;;
	*)  #上述结果都不满足时
	;;
esac

for

read 变量 键盘输入变量的值
相当于Java的for each

for 初始变量 in 数组或者变量集合(空格隔开)或者用双引号定义字符串逗号隔开
do
	结果
done

while

bash 中let指执行一条或多条表达式,用作变量运算时不需要使用$修饰变量。如a累计加1,let"a++".

while (条件)
do
	结果
done

结束循环

break结束整个循环
continue结束当前循环

函数

函数名(){
方法体
return 
}

调用时通过$?函数名来获取函数返回值
输入参数时直接使用函数名+参数(参数用空格隔开)

同步时间

ntpdate cn.ntp.org.cn

修改时间:date -s 18:18:18 更改时间为18点18分18秒
显示年月日时分秒:date “+%Y%m%d%H%M%S”

开机启动脚本

①在/etc/rc.d/ 下的rc.local文件里加入执行脚本文件的路径(source /home/instart.sh),如果rc.local和脚本文件都不是可执行文件就给它加上可执行权限。
②把脚本放到/etc/init.d下,然后将脚本添加为自启动服务(chkconfig --add 脚本地址);
注意:脚本里要写 #chkconfig: 35 66 88,意思是启动顺序35启动进程服务名为66,其余杀死进程的名为88;

定时任务

在系统服务中心,crond负责周期任务

systemctl status crond.server   #查看crond服务有没有启动
crontab -e   #添加任务,编辑当前用户的任务列表
crontab -l   #查看当前的定时任务
crontab -r   #清除任务
vim /var/spool/mail/root
systemctl restart crond.server  #重启周期任务服务,这样你改的任务才生效

● 编辑任务
星 星 星 星 星 command
分 时 日 月 周 命令
第一列表示分钟 0-59 每分钟用* 或者 */2表示
第二列表示小时 0-23(0表示0点)
第三列表示日期1-31
第四列表示月份1-12
第五列表示星期0-6 (0表示星期天)
第六列表示要运行的命令(如执行某个路径下的脚本文件)

* 表示任意时间都,实际就是“每”的意思
- 表示期间,如00 17-19 * * * cmd 就是每天的17,18,19小时执行任务
,表示分割时段,如00 17,19 * * * cmd 每天的17点和19点执行任务
/n 表示分割,可以看成是除法,每隔n执行一次,如*/5 * * * * 每隔5分钟执行一次

连接数据库

mysql -uroot -ppassword --connect-expired-password << EOF
SQL语句
commit;
quit
EOF
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值