linux总结shell
一、Shell脚本常用的头部格式:
头部的作用就是告知linux此脚本的类型;
常用的头部格式如下:(/bin/bash,是bash的路径,如果不知道路径可以通过which bash进行查看,其它命令的路径也是类似查看的)
(1)#!/bin/bash:普通的linux脚本,也是最常用的,不需要交互;

(2)#!/usr/bin/expect:可以自动交互的linux脚本,有可能需要安装expect,如果linux服务器上没有此expect命令的话。
二、Shell脚本中如何执行Linux或自定义的脚本命令:
在普通的#!/bin/bash脚本中,执行linux命令,一般要写该命令的全路径,如果不知道全路径的,可以通过which 命令,进行查看全路径,如果需要后台执行,就在命令最后+空格+&。


三、Shell脚本中如何进行自动交互:
如果需要在shell脚本中实现自动交互,一般是通过expect进行实现的,方便好用,需要注意的是expect脚本中可能是不能执行一些linux命令的,如果一定需要执行该linxu命令,可以将该Linxu命令写入到一个普通的shell脚本中去,然后在expect脚本中通过调用执行该linux命令的普通脚本,从而实现需求;
Expect脚本具体写法可以参考以下连接:
https://www.cnblogs.com/lixigang/articles/4849527.html
四、Shell脚本如何定时执行:
Linux中定时执行shell脚本,可以通过crond进行控制,需要linux中安装crond,并在通过crontab -e命令进行配置,具体参照以下连接:
https://www.cnblogs.com/bcphp/p/7084967.html
设定定时任务:
crontab -e 然后添加一条定时任务信息 保存文件 service crond restart
修改定时任务:
crontab -e 然后修改某个定时任务信息 保存文件 service crond restart
删除定时任务:
crontab -e 然后删除某个定时任务信息 保存文件即可 service crond restart
查看定时任务:
crontab -l
五、脚本中常用功能:
1、定义变量:
变量名+等号+值(如果是非数字的建议加上双引号)

2、获取变量:
(1)$变量名:此方法获取不太好,没有明确的变量边界;
(2)${变量名}:建议用此方法,变量名有明确的边界;
3、定义数组:
变量名+等号+括号(括号中的内容用空格分割)

4、获取数组中某个角标的值:
${数组名[角标]}:此方法可以获取某个数组中某个角标的值
5、获取当前日期:

6、获取几天前日期:

7、获取几天后日期:
将几天的数字修改为负数即可
8、增强for循环:

9、普通for循环:

10、输出信息:
echo 变量或字符串都可以,用双引号扩住即可;
11、字符串拼接:
直接变量加字符串拼接就行,不需要有+;

12、字符串剪切:
(1)从左边第几个字符开始,截取几个字符:

(2)从左边第几个字符开始,一直到结束:

(3)从右边第几个字符开始,截取几个字符:

(4)从右边第几个字符开始,一直到结束:

13、字符串分隔:

14、条件判断if:

15、常用的运算符:
(1)算数运算符:

(2)关系运算符:

(3)布尔运算符:

(4)字符串运算符:

(5)文件测试运算符:

16、读取文件中的数据存储到一个数组中去:

17、读取文件中的键值对数据存储到一个map中去:
注意:文件中的值一定要是键值对的形式,并且第一列中的名称一般是定死的,不能任意修改;
主要思路:
(1)首先通过两次读取两列的内容存储到两个数组中去;
(2)然后遍历一个数组,用第一个数组中的值作为key,第二个数组中的值作为value值,存储到map中去;
(3)在需要的时候,可以从map中通过输入某个key值获取其value值;
默认是用空格分列的:

指定分列的符号为“=”:

18、判断一个文件是否存在:
判断文件使用:-f

19、判断一个文件夹是否存在:
判断文件夹使用-d

20、定义一个map以及常见使用方法:
如果()中没有内容,那就是一个空map;

其它shell基本常用功能见连接:
http://www.runoob.com/linux/linux-shell.html
六、通过shell脚本定时自动备份mysql数据库数据到sql文件:
1、主要思路:
(1)定义一个数据库备份信息的txt文件,其中有以下几项:
用户名
密码
备份的数据库(多个库用逗号分隔)
备份数据文件的路径
保留备份文件的天数
数据导出工具mysqldump的文件路径
(2)定义一个脚本.sh文件,具体功能如下:
读取txt文件中的信息到一个map中去;
获取备份的数据库字符串,通过分割,结果存储到数组中;
获取当前日期和保留文件天数以前的日期;
首先通过遍历备份数据库数组,删除保留文件天数外的sql文件;
然后再次遍历备份数据库数组,导出数据库中的数据到sql文件;
(3)通过crontab -e命令编辑crontab文件,将后台定时执行脚本.sh文件,然后service crond restart重新启动crond,以便通过crond定时执行脚本文件,实现定时备份mysql数据库中的数据到sql文件中去。
2、具体代码:
(1)备份数据库信息的txt信息如下:


(2)脚本.sh文件信息如下:


(3)crontab定时后台执行shell脚本命令如下:(一定要将shell脚本重定向到一个文件中去,以便接收shell脚本的echo输出信息和异常信息)

二、脚本中打印日志信息,制作脚本执行日志文件:
在编写脚本过程中,关键的步骤点,可以通过echo打印日志信息到桌面显示屏中。一般编写的shell脚本都是需要定时执行的,一般通过crond就可以简单的实现shell脚本的定时执行,通过crontab -e编写定时任务的时候,一定要记住,将shell脚本中打印日志的信息重定向到一个文件中去,这样就可以通过观察此文件中的日志信息来观察shell是否正常运行了。
输出日志常用格式:年-月-日 时:分:秒 日志内容


crond中设定定时任务时,重定向的日志文件,最好是在一个文件夹下,每次输出一个文件,这样文件添加一个日期就可以轻松解决,以后也方便查看日志:文件名_日期.txt:
非常注意:日志格式化中用的是斜号(Esc下面那个键),不是单引号;
linux总结shell的更多相关文章
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- linux中shell变量$#,$@,$0,$1,$2的含义解释
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...
- 使用C#给Linux写Shell脚本(下篇)
在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...
- linux中用shell获取昨天、明天或多天前的日期
linux中用shell获取昨天.明天或多天前的日期 时间 -- :: BlogJava-专家区 原文 http://www.blogjava.net/xzclog/archive/2015/12/0 ...
- linux中用shell获取时间,日期
linux中用shell获取昨天.明天或多天前的日期:在Linux中对man date -d 参数说的比较模糊,以下举例进一步说明:# -d, --date=STRING display time d ...
- Linux 的shell 字符串截取很有用。有八种方法。
一 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.linuxidc.com/123.htm 1 # 号截取,删除左边字符,保留右边字符. echo ${va ...
- Linux Bash Shell 快速入门
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 ...
- linux,shell输入反斜杠显示'W'。
linux,shell输入反斜杠显示'W'. solution: 字体必须为"Courier New".
- 06 Linux下Shell介绍
一.概述 每个人在成功登陆Linux后,系统会出现不同的提示符号,例如$,~,#等,然后你就可以开始输入需要的命令.若命令正确,系统就会依据命令的要求来执行,直到注销系统为止,在登陆到注销期间,输入的 ...
- linux BASH shell设置字体与背景颜色
linux BASH shell下设置字体及背景颜色的方法. BASH shell下设置字体及背景颜色 echo -e "\e[31mtest\e[41m" \e[30m 将字 ...
随机推荐
- RESTful API架构和oauth2.0认证机制(概念版)
1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...
- php图片上传旋转压缩方法
用到php的exif扩展,需要开启exif 在php.ini文件中去掉exif组件的注释 extension=php_mbstring.dll //要放在php_exif.dll前面让它先加载 ext ...
- win10 解决“ 'g++' 不是内部或外部命令,也不是可运行的程序或批处理文件”的问题
https://www.jianshu.com/p/9bffbaf12bed 2. 安装MinGW 将MinGW安装在D:\mingw文件夹下(可自由选择,这里为之后添加环境变量作为范例) 安装好后选 ...
- 【UE4】二十三、UE4笔试面试题
在CSDN博客看到的,带着这些问题,多多留意,正所谓带着问题学习. 一. 1.Actor的EndPlay事件在哪些时候会调用? 2.BlueprintImplementableEvent和Bluepr ...
- QQ空间相册展示特效
<!doctype html> <html lang="en"> <head> <title>QQ空间相册展示特效<title ...
- ARC下还会存在内存泄露吗?
1.第三方框架不正当使用.2.block,delegate,NSTimer循环使用.3.非oc对象的内存处理.4.地图类处理.5.大次数循环内存暴涨. 非oc对象的释放: 例如使用CGImageRel ...
- Pascal小游戏 俄罗斯方块
俄罗斯方块已经成为了和“Hello World”一样的程序了吧? 不要直接复制,可能需要事先 Format. program cube;uses crt,graph,dos;var gd,gm:sma ...
- python学习笔记十六:读取JSON文件
读取JSON文件可以用JSON库,示例代码: #coding:utf-8 import json with open("msg.json") as jsonfile: json_d ...
- 把现有Unity3d游戏向Windows Phone 8.1移植(基础)
最近在将一款现有的游戏向Windows Phone平台移植,暂时完成了一个小阶段,做一个总结. 开发环境: Windows 8.1 系统及以上,愿意的话,用Windows 10 尝鲜也可以. 微软账号 ...
- 架构师速成5.1-小学gtd进阶 分类: 架构师速成 2015-06-26 21:17 313人阅读 评论(0) 收藏
人生没有理想,那和咸鱼有什么区别. 有了理想如何去实现,这就是gtd需要解决的问题.简单说一下gtd怎么做? 确定你的目标,如果不能确定长期目标,至少需要一个2年到3年的目标. 目标必须是可以衡量的, ...