shell编程

第一章

1.1 什么是shell?

Shell其实是一个命令解释器,作用是解释执行用户输入的命令以及程序等,用户每输入一条命令,Shell给予解释执行一条。这种键盘一输入命令,就可以立即得到回应的对话方式,称为交互模式。
Shell存在于操作系统的最外层,负责与用户直接对话。处理用户的输入,并将操作系统执行结果返回给用户。在用户登陆到操作系统之后的所有操作均由Shell解释执行。Shell在操作系统中所处的位置如下

image.png

1.2 什么是shell脚本?

简言之,如果shell命令通过写入到一个程序文件并执行的时候,此程序我们就称之为shell脚本。但是在生产环境中的Shell脚本不仅仅是这么简单,而是将一些命令、变量以及流程控制语句有机结合并生成的功能完善的强大的应用程序。举例说明:
清除/var/log下message日志文件简单脚本

cat /dev/null > /var/log/messages
reboot

生产环境中清除/var/log下message的脚本

!/bin/bash

清除日志脚本,版本 2

LOG_DIR=/var/log

脚本需要使用root用户权限来执行,因此,对当前用户进行判断,则不和要求的用户给出友好提示,并终止程序执行

ROOT_UID=0
if [ "ROOT_UID" ] # <== 如果当前用户不是root,则不允许执行脚本
then
echo "Must be root to run this script." # <== 给出提示后退出
exit 1
fi

如果切换目录不成功,则给出提示并中止程序执行

cd $LOG_DIR || {
echo "Cannot change to necessary directory."
exit 1
}

经过上述判断之后,此处的用户权限应该是对的了,只有清空成功,再能打印成功提示

cat /dev/null >messages &&{
echo "Logs cleaned up."
exit 0 # 返回0则成功
}
echo "Logs cleaned up fail."
exit 1 # 返回1则失败

1.3 什么时候使用shell脚本?

Linux批量管理
自动化完成系统优化
自动化安装Linux操作系统(kickstart和cobbler)
测试工具和内容自动化
邮件自动发送
服务自动重启
代码上线
定时备份和定时启停服务
Linux系统监控、服务监控、端口监控、IP黑名单监控、流量监控(脚本+zabbix)
服务的日志切割、存储备份、日志分析等等

1.4 如何学好shell脚本?

基础变量、条件表达式、流程判断、if、for循环、while循环、case语句、循环控制
从简单的判断和循环开始写
阅读、模仿、尝试从零开始写
写注释,将任务分解成一个个小任务,类似于打游戏闯关
找一本合适的教材,或者自己认真记笔记
多练习-思考-练习-思考,循环往复

1.5 解释型语言和编译型语言

1.5.1 编译型语言:
指用专用的编译器,针对特定的操作平台(操作系统)将某种高级语言源代码一次性翻译成可被硬件平台直接运行的二进制机器码,这个过程叫做编译。
编译好的可执行文件(.exe),可在相对应的平台运行(移植性差,但是效率高)。
C\C++.....

1.5.2 解释型语言:
用专门解释器对源程序逐行解释成特定平台的机器码并立即执行的语言,相当于把编译型语言的编译执行过程混合在一起同时完成的。
编译型语言执行效率较低,切不能脱离解释器运行。但是跨平台比较容易,只需提供相应的解释器
shell\python

注:Java属于特殊的。既可以说成是解释型语言,又可以说成是编译型语言

shell是命令解释器
shell脚本是由命令组合成的一个可执行的文件
编译型语言和解释型语言

1.6 shell脚本建立和执行

1.6.1 解释器类型
bash是centos中的默认解释器
sh
1.6.2 脚本定义
脚本开头

!/bin/bash

1.6.3 父shell和子shell
脚本嵌套
父shell中的环境变量,在子shell中可以看到
而子shell中的变量,在父shell中看不到
1.6.4 shell执行方式
sh & bash,最常用的使用方式
cat *.sh | bash,适用于执行多个脚本
sh < oldboy.sh,了解一下,输入重定向
/root/oldboy.sh,需要执行权限
. oldboy.sh
source oldboy.sh

1.6.5 shell开发习惯

>脚本存放在固定目录
开头加脚本解释器信息
附带作者和版权信息
脚本中尽量不用中文
脚本扩展名用.sh
成对的符号一次性书写完成
注意缩进
养成写注释的良好习惯

总结:
脚本放在指定目录
创建脚本,后缀是.sh
在第一行顶格添加命令解释器的声明#!/bin/bash
添加作者时间和版权信息

养成良好习惯,添加注释
Centos7默认解释器是/bin/bash
退出当前shell的命令是:exit

第二章 变量基础

2.1 定义变量

值可变的量,称为变量
变量名=变量值,常说的变量,一般是变量名
字母数字下划线,不能是数字开头

2.2 环境变量和普通变量

2.2.1 环境变量(全局变量)

可在创建他们的shell以及派生出来的任意子shell中使用
环境变量包括内置的环境变量和自定义的环境变量,且通常为大写。
环境变量的定义方式:

declare -x 变量名=value
export 变量名=value

环境变量有四个文件,他们的执行顺序如下图所示:
image.png

登陆shell会加载所有的环境变量
非登陆shell可能会加载~/.bashrc或者/etc/bashrc(上图非绿色部分),然而有些定时任务以上两个根本不会加载,所以需要手动指定,建议在定义变量时定义到/etc/bashrc
可以在环境变量文件中定义普通变量

2.2.2 普通变量

>普通变量只有在当前shell下才能使用定义方式

适用于一般场景,不适用于带有空格等字符

变量名=value

所见即所得的定义方式

变量名=’value’

解析双引号之内的变量

变量名=”value”

注意点:(举例说明)

  1. 变量如果后面有内容,一定要把变量括{}起来
  2. 希望变量内容原样输出则加单引号
  3. 希望获取变量中的命令执行结果用``或者$()

1、定义环境变量的方式:
export 变量名=变量值
2、定义普通变量的方式:
变量名=变量值
3、定义变量的三种方式

适用于一般场景,不适用于带有空格等字符

[export] 变量名=value

所见即所得的定义方式

[export] 变量名=’value’

解析双引号之内的变量

[export] 变量名=”value”
4、环境变量文件的加载顺序
/etc/profile ===> ~/.bash_profile ===> ~/.bashrc ===> /etc/bashrc
5、非登录式(ssh)的shell只加载后两个

2.3 临时变量和永久变量(了解)

如果按照变量的生存周期来划分的话,Linux变量可以分为两类:
永久变量:需要修改变量配置文件,使得变量永久生效
临时变量,使用export命令或者直接在当前shell中赋值的变量

用source执行脚本和用bash执行的区别是什么
答案:用source执行的脚本,变量会在父shell下生效,用. 也是
用bash执行的脚本,变量不会在父shell下生效
如何自定义环境变量
定义变量内容,不加引号、单引号、双引号、反引号结果有什么不同?该怎么用
反引号:强制命令解析
在shell编程中,如果要访问变量值,可以变量前加一个__FRUTT=apple B)显示变量的值:fruit=apple C)显示变量的值:echo $FRUTT

2.4 shell特殊变量

2.4.1 参数特殊变量

image.png

2.4.2 进程特殊变量

image.png

2.5 shell变量子串

image.png

Linux云计算学习笔记day56相关推荐

  1. Linux云计算学习笔记-1

    计算机由硬件+软件组成,操作系统是最核心的软件,负责协调和管理上面运行的各种应用软件. Linux常用命令 问题:当用户执行一个命令时,Linux提供是按照什么逻辑和顺序来执行? 1.系统先判断是否是 ...

  2. Linux云计算学习笔记day39

    for  n in {1..10} ; do echo $n  ; done i的初始化 ;i<=10 条件;i++ 从1开始每次增加1 大于10的时候结束循环 for((i=1;i<=1 ...

  3. Linux云计算学习笔记day52

    6.4.2 准许或禁止端口 多个端口:表示范围 1-1024范围 [root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot ...

  4. 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin

    云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin ...

  5. linux系统管理学习笔记之三----软件的安装

    linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02 标签:linux 系统管理 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  6. linux系统管理学习笔记之一-------linux解压缩命令

    linux系统管理学习笔记之一-------linux解压缩命令 2009-12-29 11:52:55 标签:linux tar [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接 ...

  7. 操作系统进程学习(Linux 内核学习笔记)

    操作系统进程学习(Linux 内核学习笔记) 进程优先级 并非所有进程都具有相同的重要性.除了大多数我们所熟悉的进程优先级之外,进程还有不同的关键度类别,以满足不同需求.首先进程比较粗糙的划分,进程可 ...

  8. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  9. linux系统管理学习笔记之八---linux文件与目录的管理及权限

    linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...

  10. 韩顺平Linux教程学习笔记

    Linux系统学习笔记   新装了deepin v23系统,结果磁盘没设置好,玩崩了,百度半天修复不了,看看韩顺平老师的Linux操作课程,做做笔记(只记录对自己有用的).   B站网址 基础篇·Li ...

最新文章

  1. Codeforces Round #715 (Div. 2)
  2. Python爬虫_BeauifulSoup
  3. nginx静态文件服务器_Linux分享文件?快速创建静态文件服务器
  4. 参考阿里云DMS快速开发数据管理平台
  5. 清除string内容_前端面试之javascript相关内容整理一
  6. 查看计算机上隐藏用户,教你如何隐藏windows系统账户
  7. java三角函数计算器_java实现多功能科学计算器(包括进制转换,三角函数,四则运算等)...
  8. sha256 oracle,node如何使用sha256算法?
  9. SwiftyJSON源码分析
  10. C++ Concurrency in Action, 2nd Edition 免积分下载
  11. 车型数据导入excel
  12. 项目管理学习 ---- 项目管理沟通技巧
  13. 全球区块链专利排行榜中国52家企业上榜
  14. nodejs stream 经典解析
  15. 惠普ipaq蓝牙键盘配对码_将旧的Compaq Ipaq从Ubuntu 5.10 Breezy Badger升级到8.10 Intrepid Ibex...
  16. Windows系统消息
  17. c#中如何将byte数组转换成string从而在textbox中显示出来?
  18. 深入浅出CChart 每日一课——快乐高四第五十八课 大道至简,炫彩界面库之接口代码优化
  19. Jade 6.0的使用
  20. 创新技术简化施工,助高速公路穿越海峡

热门文章

  1. 网贷平台倒闭了钱要还吗?网贷平台倒闭了怎么还钱
  2. 《从零开始的 RPG 游戏制作教程》第五期:制作物品和技能
  3. win10怎么快捷锁定计算机,win10锁屏快捷键如何设置_让你win10电脑一键秒锁屏的方法...
  4. 没有明星代言,如何让用户相信你的产品?
  5. sklearn:make_blobs聚类数据生成器
  6. vmware安装或卸载时,显示无法打开注册表项
  7. 微信小程序开发入门需要学什么?
  8. 关于冯.诺依曼结构与哈佛结构的一些疑问
  9. 从零点一开始机器学习之晦涩难懂的各种概念
  10. golang使用minio上传资源文件的功能