简单介绍shell

1. 为什么学习Shell
1)减少重复性工作
2)减少出错
3)批量管理服务器
4)提高工作效率
5)懒
6)安装系统
7)初始化操作(优化SSHD、禁止开机服务启动、安装基础软件,iptables,selinux等等)
8)安装服务、LNMP LAMP (nginx、PHP、MySQL、Tomcat、Keepalived、NFS、Rsync、Zabbix、redis等等)
9)服务的配置和启动,Python服务启停方式 python3.5 test.py IP 域名
10)代码上线
11)监控(框架、端口、进程、流量 cacti)
12)日志切割、日志分析(三剑客 grep sed awk)、安全(ELK)
2. 学习Shell需要的基础知识
1) 熟练掌握基础命令
2)编程思维
3)熟练掌握VIM
4)三剑客sed grep awk *****

3. 如何学好Shell(包含了哪些东西)
1)环境变量
2)条件表达式
3)if判断语句
4)for循环语句
5)while循环语句
6)case语句
7)循环控制命令 continue break exit
8)读懂编程-框架-思考-自己练习-总结-编程思路(积累)
注意事项:不能拿别人的来用

二、初步认识Shell
1. 什么是Shell
1)Shell是命令解释器、解释我们输入的命令和程序
2)Shell交互式模式 Shell等待我们的输入、会执行我们的命令反馈结果
3)Shell非交互模式 Shell不与我们交互、直接读取我们文件内或程序内的命令
2. 什么是Shell脚本
1)就是把Shell可执行命令放入文件里,条件表达式、判断循环等等
3. 创建Shell脚本(规范)
1)路径统一(自动化)(log存放的位置、程序安装位置)
/server/scripts/
2)开头写解释器注释
顶头写注释#!/bin/bash,不能写在后面,下面的注释是不执行,是给我们看的,注释还可以写在命令行的后面与命令同行
3)脚本名以.sh结尾
4)脚本内写作者版本
#Version V1.0
#Author Lizhenya
#Create Time 2018-11-05
#QQ:5555555
#count

5)每个段的注释
6)注释尽量不用中文
7)成对的符号要一次性书写
8)循环语句一次性书写完毕
三、环境变量
1.什么是环境变量
1)x=1 y=x+10 y=? x 变量 等号是赋值 等号右边的变量的值
2)等号后面一堆的内容,用一个名字来代替叫做变量
3)环境变量以生存周期来分类
1. 临时性环境变量 export,关闭shell、变量失效
export lizhenya=test
echo $lizhenya
exit
echo $lizhenya
2. 永久环境变量 需要更改配置文件/etc/profile、永久生效
4)环境变量生效的顺序
1. /etc/profile ~/.bash_profile ~/.bashrc /etc/bashrc

2.定义环境变量
1) 变量名字的写法 字母 数字 下划线的组合,尽量以字母开头、不能以数字开头,等号两边不能有空格,名字的写法
1. lizhenya=test
2. LizhenYa=test 大驼峰语法
3. lizhenYa=test 小驼峰语法

3.环境变量三种定义方式
1)数字变量如何定义 lizhenya=123 # 数字必须是连续的
2)字符串变量如何定义 lizhenya="I am lizhenya teacher" # 默认就加双引号
lizhenya='I am lizhenya teacher' # 所见即所得、定义什么值输出什么值
[root@m01 ~]# lizhenya=I am lizhenya
-bash: am: 未找到命令
[root@m01 ~]# lizhenya="I am lizhenya"
[root@m01 ~]# echo $lizhenya
I am lizhenya

3)命令变量如何定义 lizhenya=`date` # 反引号 解析命令

4.Shell特殊位置环境变量
$0 # 脚本名称、如果你的脚本全路径执行,带全路径脚本名
$n # 代表了传参的参数 $0 脚本名称,大于9的数字用{10}括起来
$# # 代表了脚本所有传参的个数
$* # 脚本中所有传参的参数,不加双引号和$@一样,加了双引号把所有的参数作为一个整体输出
$@ # 脚本中所有传参的参数,不加双引号和$*一样,加了双引号把传参的参数作为单个字符串输出
set -- "I am" lizhenya teacher
[root@m01 ~]# for i in "$*";do echo $i;done
I am lizhenya teacher
[root@m01 ~]# for i in "$@";do echo $i;done
I am
lizhenya
teacher
-------
$* 为 “1 2 3”(一起被引号包住)
$@ 为 “1” “2” “3” (分别被包住)
$? # 代表了上一次命令执行的结果,0为成功,非零为失败
$$ # 获取当前脚本的PID
$! # 获取上一个脚本的PID
5.变量子串
1. # # 获取字符串的长度
[root@m01 ~]# echo ${#oldboy}
2. : # 字符串切片
3. 扩展题:如何取字符串的长度?
1.echo ${#oldboy}
2.echo $oldboy|wc -L
3.expr length "${oldboy}"
4.echo $oldboy|awk '{print length($0)}'
4. 取小于3的字符串

原文地址:https://www.cnblogs.com/fangdecheng/p/9915374.html