Shell脚本语言是实现Linux/Unix系统管理及自动化运维所必须的重要工具,Linux系统的底层以及基础应用软件的核心大都涉及Shell脚本的内容。php
一个合格的Linux系统管理员都必须熟练编写Shell脚本语言,从而提高运维人员的工做效率,减小没必要要的重复性工做。python
熟练使用VIm编辑器,熟悉SSH终端等配置linux
在Linux下开发shell脚本用的最多的就是vim编辑器,熟练使用vim可使得shell脚本开发事半功倍!shell
有必定的Linux命令基础,熟练掌握80个命令以上编程
shell和其余脚本语言不一样,如python,Shell缺乏能够直接使用的外部函数库,所以Linux系统的命令就能够当作Shell的函数库!vim
熟悉常见Linux服务部署,优化,分析与排错bash
学习Shell直接的目的是在工做中对系统以及服务进行自动化管理,所以若是不熟悉服务操做,使用shell也就没有意义了运维
Shell存在于操做系统的最外层,负责与用户直接对话,把用户的输入解释给操做系统,处理操做系统的输出结果,而后反馈给用户。ssh
Shell是一个命令解释器,它的做用是解释并执行用户输入的命令和程序等,用户每输入一条命令,Shell解释器就执行一条,存在一种交互的方式。编辑器
从开机准备输入用户名和密码,到登陆成功,全部的操做都是Shell解释并执行的。
当命令或者程序语句不是在命令行中执行,而是经过一个程序文件来执行时,这个程序就称做Shell脚本。
一个简单的Shell脚本
清除/var/log下的messages日志文件
把全部命令放入一个文件,堆积起来后就是一个脚本文件!注意文件的可执行权限,与用户身份
#清除脚本日志 cd /var/log cat /dev/null > messages echo "Logs cleaned up . done"
Shell脚本语言是弱类型语言(无须定义变量的类型便可使用)
在Linux中有两大Shell,一是Bourne shell,二是C shell
咱们须要知道的就是标准的Bourne Again shell(bash)所取代
查看CentOS 7系统的Shell
其余的脚本语言
php
Perl
Python
语言选择
Shell脚本语言优点在于处理系统底层的业务,基于linux命令处理也是最快的,经常使用语开发自动化安装,监控报警,软件启动等脚本。
脚本开头
一个规范的脚本文件会在第一行指出由哪一个程序来执行脚本的内容,必须位于第一行!!!若是你不加默认也会交给bash解释,良好的编程习惯,最好加上开头解释器语言标识
#!/bin/bash
#!/usr/bin/env python
bash 脚本名 sh 脚本名 此方法是脚本没有可执行权限时,或者文件头没指定解释器时用的方法
path/scriptName
./scriptName
此方法须要脚本有可执行权限,chmod +x scriptName
source scriptName
. scriptName
加载并执行脚本文件中的命令和语句
[root@oldboy_python /tmp 11:10:08]#sh test.sh chaoge nb [root@oldboy_python /tmp 11:10:18]#cat test.sh #!/bin/bash echo 'chaoge nb' [root@oldboy_python /tmp 11:10:21]#. test.sh chaoge nb [root@oldboy_python /tmp 11:10:33]#source test.sh chaoge nb
#添加可执行权限给test.sh
chmod +x test.sh
./test.sh
环境变量通常指的是export内置命令导出的变量,用于定义SHell的运行环境。
Shell经过环境变量来肯定命令提示符,也就是超哥前面说的PS1变量
环境变量能够在命令行中设置和建立,可是用户退出命令行时变量值就会丢失,所以能够写入/etc/profile文件中,每次用户登陆时,变量都会被初始化!
环境变量名字均大写,用env查看
设置登陆的提示
[root@oldboy_python ~ 11:21:51]#cat /etc/motd 'welcome chaoge bakcome~~~~~~~~~'
yudanL:~ yuchao$ ssh root@192.168.11.11
Last failed login: Wed Aug 29 11:20:20 CST 2018 from 111.231.199.24 on ssh:notty
There were 25 failed login attempts since the last successful login.
Last login: Wed Aug 29 10:45:51 2018 from 223.72.74.11
'welcome chaoge bakcome~~~~~~~~~`'
定义变量
变量定义的注意点
name='chaoge'
echo $name
echo ${name} #帮助解释器识别变量的边界
#变量从新赋值
name='chaogenb'
设置只读变量
[root@oldboy_python ~ 11:29:31]#readonly name [root@oldboy_python ~ 11:30:27]#name='chaogenb3' -bash: name: 只读变量
删除变量
unset name
变量类型
字符串能够用单引号,也能够双引号,也能够没引号
[root@oldboy_python ~ 11:42:42]#addr='shahe' [root@oldboy_python ~ 11:44:55]#echo $addr shahe
单引号的任何字符串都会原样输出,单引号字符串中的变量无效
单引号字符串不能出现单一的单引号,转义符也不可用,可用做字符串拼接
双引号
双引号里能够用变量
双引号能够有转义符
[root@oldboy_python ~ 11:45:01]#addr='changpingshahe' [root@oldboy_python ~ 11:48:06]#name='yuchao' [root@oldboy_python ~ 11:49:00]#message="Hello,${name},Your addr is \"${addr}\" " [root@oldboy_python ~ 11:50:05]#echo $message Hello,yuchao,Your addr is "changpingshahe"
获取字符串长度
[root@oldboy_python ~ 13:36:35]#str='abc' [root@oldboy_python ~ 13:36:49]#echo ${#str} 3
切片操做
左闭又开规则
[root@oldboy_python ~ 13:39:45]#str='I am chaoge,hello world!' #取出0和10索引的字符 [root@oldboy_python ~ 13:40:42]#echo ${str:0:11} I am chaoge
查找字符索引
[root@oldboy_python ~ 13:45:02]#str='I am chaoge,hello world!' [root@oldboy_python ~ 13:46:20]#echo `expr index "$str" e` 11