Shell编程学习文档

Shell编程学习文档Shell基础概述什么是ShellShell是一个命令解释器,用于解释用户输入的命令、程序等。​Shell分为交互式Shell和非交互式Shel

Shell基础概述

什么是Shell

Shell是一个命令解释器,用于解释用户输入的命令、程序等。
​
Shell分为交互式Shell和非交互式Shell。交互式Shell就是命令行上一条一条命令的执行,而非交互式Shell就是以脚本的方式运行。
#交互式和非交互式的区别: 通过变量$-来查看
[root@shell01 ~]# echo  $-              #命令行上面的执行
himBH
[root@shell01 ~]# echo 'echo  $-' > test.sh 
[root@shell01 ~]# sh  test.sh           #脚本中的执行
hB
​
#解释
h       # hashall       hash缓存表,shell会记录执行过的命令路径 
​i       # interactive   当前的shell是交互式shell
m       # monitor       监控后台的进程的状态,监控模式
B       # 大括号扩展     支持{}:整体,序列
H       # history       历史命令的记录  

什么是Shell脚本

​1. 系统命令的堆积  
2. 特定的格式+特定的语法+命令=组成的文件 
3. 以.sh为结尾的文件

为什么要学习Shell脚本

​自动化运维
​减少不必要的重复性工作
​提高工作效率

学习Shell脚本,需要什么技能

​1. 要对Vim文本编辑器熟悉, .vimrc要会运用
​2. 要有Linux命令的基础,最少要熟悉80个以上的常用linux命令
​3. 对正则表达式要熟悉,对Awk  Sed  Grep 三剑客要熟练使用。
​4. 熟悉常见的linux服务,服务配置,网络,优化,日志分析、排错等

如何学好Shell脚本呢

​阅读、模仿、练习、思考  
​要自己的思路,分析问题,形成自己的风格
​变量名要规范,使用驼峰语法
​不要拿来主义,特别是针对新手 

Shell脚本能干什么

​1. 基础配置:系统初始化操作、系统更新、内核调整、网络、时区、SSH优化等
​2. 安装软件:LNMP、LAMP、Redis等
​3. 配置变更:Nginx Conf、PHP Conf、MySQL Conf、Redis Conf等
​4. 业务部署:Git+jenkins+Shell,进行自动化代码上线、回滚  
​5. 日常的备份:通过定时任务+脚本
​6. 信息收集:Zabbix + Shel,自动化监控系统状态
​7. 日志分析:ELK
​8. 服务扩容/缩容:Zabbix+Shell,比如监控CPU状态,判断是否需要添加或减少服务器  ​

Shell脚本规范

​1. 脚本统一放在一个目录下:/scripts
​2. 建议使用Vim文本编辑器,有高亮显示 
​3. 扩展名以.sh为结尾
​4. 脚本的开头要写#!/bin/bash,指定这个脚本使用什么命令解释器解释脚本中的命令,如果不写,默认是/bin/bash
   #!:表示的是幻数,这个幻数必须是在脚本第一行才会生效,其他行则表示注释信息  
​5. #号开头的都是注释信息,写脚本最好加上注释信息,注释使用英文,不要使用中文,更不要用拼音
6. 脚本带上作者及版权相关信息
7. 成对的符号,要一次书写完成,比如:'' ""      
8. 格式的语法也要一次书写完成,比如for  i  in  do  done

Shell的执行方式

​脚本从上到下 从左到到右的方式进行执行,脚本执行时遇到子脚本,会执行子脚本,子脚本执行完成后,退出子脚本,继续执行脚本中的内容。
​
脚本运行时,会向系统内核请求一个进程。脚本就会在该进程下进行运行,终止操作。

1、bash script-name 或者 sh script-name

#不需要执行权限
​
[root@shell01 /scripts]# echo "pwd"  >test.sh
[root@shell01 /scripts]# cat test.sh 
pwd
[root@shell01 /scripts]# bash  test.sh
/scripts
[root@shell01 /scripts]# sh  test.sh
/scripts
[root@shell01 /scripts]# ll
total 4
-rw-r--r-- 1 root root 4 2020-02-19 11:10 test.sh

2、path/script-name(绝对路径) 或者 ./script-name

#必须要有执行权限
​
[root@shell01 /scripts]# ll
total 4
-rw-r--r-- 1 root root 4 2020-02-19 11:10 test.sh
[root@shell01 /scripts]# /scripts/test.sh
-bash: /scripts/test.sh: Permission denied
[root@shell01 /scripts]# ./test.sh
-bash: ./test.sh: Permission denied
[root@shell01 /scripts]# chmod u+x test.sh 
[root@shell01 /scripts]# ll
total 4
-rwxr--r-- 1 root root 4 2020-02-19 11:10 test.sh
[root@shell01 /scripts]# /scripts/test.sh 
/scripts
[root@shell01 /scripts]# ./test.sh 
/scripts

3、source script-name 或者 . script-name

 #无需执行权限,将脚本中的命令调入到当前环境下执行 

4、cat script-name | bash

 #不需要执行权限,将脚本中的命令调入到当前环境下执行 

5、bash < script-name

 #不需要执行权限,将脚本中的命令调入到当前环境下执行 

登录式Shell和非登录式

​登录式;通过用户名和密码的方式进行登录的
​非登录式:不是通过用户和密码的方式进行登录的,脚本其实就是一个非登录式Shell 
​
exit和logout的区别:   
exit  可以退出登录式和非登录式Shell
​logout 只能退出登录式Shell,不能退出非登录式Shell

登录式shell配置文件执行顺序
 /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
 注:每个调用的脚本会依次撤销前一个调用脚本中的改变,在退出登录Shell时,我们还可以执行某些任务,如创建自动备份、清除临时文件。把这些任务放在.bash_logout文件中。

非登录式shell配置文件执行顺序
 ~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/4200.html

(0)
编程小号编程小号
上一篇 2022-12-26
下一篇 2022-12-26

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注