Shell 实现的功能
1)手动安装操作系统 2)初始化操作系统 3)安装服务 4)服务启动systemd 5)shell进行代码上线 6)监控zabbix cacti网卡 Nagios监控硬件交换机路由器 7)日志分析
必备基础
1.熟练使用vim编辑器2.熟悉ssh终端3.熟练使用linux基础命令4.熟练使用四剑客
基础命令参考链接
shell 知识点
变量基础 条件表达式 if判断 for循环 while循环 utile循环 continue break exit case语句 数组 看懂别人的脚本 掌握常见语法 重复练习 要有编程思维 找合适的教材(项目多)
Shell入门
1)什么是Shell
Shell是一个命令解释器,作用解释用户输入的命令以及程序。
2)什么是Shell脚本
把命令统一在放一个文件中进行执行,称为Shell脚本。
Shell脚本包含若干个命令+IF判断+FOR循环+变量+数组等等
hello,world
[root@m01 /server/scripts ]# vim test.sh #!/bin/sh #解释器 #Author ajie #作者 #print hello word #目的 echo "hello,word!"
如何执行脚本
sh test.sh chmod +x test.sh ./test.sh /server/scritps/test.sh source test.sh . test.sh cat test.sh|bash bash < test.sh
变量
变量的生存周期
永久的 需要修改环境变量配置文件 变量永久生效 /etc/profile临时的 直接使用export声明变量即可,关闭shell则变量失效 不加export 则只对当前的shell生效加export 则对当前打开窗口所有的shell生效
环境变量配置文件生效的顺序
/etc/profile .bash_profile .bashrc /etc/bashrc
自定义环境变量
变量名=变量值
获取值 $变量名
[root@m01 ~ ]# name=ajie [root@m01 ~ ]# echo $nameajie
变量值的定义
数字变量内容定义 age=18 字符串定义 boy='I am teacher' 默认是双引号 混合字符串必须加双引号 数字 字符串 变量
单引号和双引号的区别
单引号: 所见即所得 吃什么吐什么 定义的什么值输出或者调用的就是什么值 不会解析变量 双引号:可以解析变量
命令的定义方式
test=`pwd` test=$(pwd)
Shell特殊位置重要变量
配合echo使用
$0 获取当前Shell脚本的文件名 如果脚本全路径执行则显示全路径 basename 只获取脚本名称 $n 获取当前脚本的第n个参数,n为0则是脚本名称,从$1开始代表脚本的第一个参数 $9以后需要加{} ${10} $# 获取shell脚本所有传参的总个数 $* 获取shell脚本所有传参的参数,如果不加双引号则和$@相同,在循环语句中如果加上双引号,则表示将所有的参数视为单个字符串 $@ 获取shell脚本所有传参的参数,如果不加双引号则和$*相同,在循环语句中如果加上双引号,则表示将所有的参数视为独立字符串 $? 获取执行上一条命令的执行状态结果,返回值0为成功 非0失败 $$ 获取当前脚本的PID $! 获取上一个后台工作脚本进行的PID $_ 获取脚本最后的一个参数 类似于ESC .
脚本的传参
直接传参
[root@m01 /server/scripts ]# cat test.sh #!/bin/bash #Author: ajie #FileName:test.sh ping -c1 -W1 $1 &>/dev/null [ $? -eq 0 ] && echo "ping is ok" || echo "ping is error" [root@m01 /server/scripts ]# sh test.sh baidu.com ping is ok [root@m01 /server/scripts ]# sh test.sh baiduuuuuuuuu.com ping is error
变量赋值
[root@m01 /server/scripts ]# cat test.sh #!/bin/bash #Author: ajie #FileName:test.sh url=$1 ping -c1 -W1 $url &>/dev/null [ $? -eq 0 ] && echo "ping is ok" || echo "ping is error"
read读入
[root@m01 /server/scripts ]# cat test.sh #!/bin/bash #Author: ajie #FileName:test.sh read -p "check your url: " url ping -c1 -W1 $url &>/dev/null [ $? -eq 0 ] && echo "ping is ok" || echo "ping is error" [root@m01 /server/scripts ]# sh test.sh check your url: lvxinjie.cn ping is ok
变量的子串
子串切片
name="I am shuaiguo"
取出am 三种方式取值
echo $name|awk '{print $2}' am echo $name|cut -c 3-4 am echo ${name:2:2} am
如何统计变量内的长度
echo $name|wc -L 13 echo ${#name} 13 echo $name|awk '{print length}' 13 expr length "$name" 13
变量的删除和替换
url=www.sina.com.cn 方法1 sed -r 's#www.(.*)#\1#' 方法2 echo www.sina.com.cn|grep 's.*$' -o 方法3 echo $url|sed 's#www.##g' 方法4 echo ${url:4} 方法5 切碎组合 echo $url|cut -d "." -f2 方法6 变量删除 [root@shell ~]# echo $url www.sina.com.cn [root@shell ~]# echo ${url#*.} sina.com.cn [root@shell ~]# echo ${url#*.*.} com.cn [root@shell ~]# echo ${url#*.*.*.} cn [root@shell ~]# echo ${url} www.sina.com.cn [root@shell ~]# echo ${url#*s} ina.com.cn [root@shell ~]# echo ${url} www.sina.com.cn [root@shell ~]# echo ${url#*c} om.cn [root@shell ~]# echo ${url##*c} n [root@shell ~]# echo ${url} www.sina.com.cn [root@shell ~]# echo ${url%.*} www.sina.com [root@shell ~]# echo ${url%.*.*} www.sina [root@shell ~]# echo ${url%%.*} www [root@shell ~]# echo $url www.sina.com.cn [root@shell ~]# echo $url|sed 's#sina#baidu#g' www.baidu.com.cn [root@shell ~]# echo ${url/sina/baidu} www.baidu.com.cn [root@shell ~]# echo ${url} www.sina.com.cn [root@shell ~]# echo ${url/w/a} aww.sina.com.cn [root@shell ~]# echo ${url//w/a} aaa.sina.com.cn