今天说一说Shell编程学习文档,希望您对编程有更深刻的理解.大家好,我是编程小浩浩。
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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/4200.html