2019-05-27day51Shell编程入门1-3章

第一章 如何才能学号Shell编程

学好Shell编程所需的基础知识:

(1) 熟练使用vim编辑器。
(2) 要有一定的Linux命令基础,120个常用命令以上。
(3) 熟练掌握Linux正则表达式以及三剑客命令。

如何能学号Shell编程之“老鸟”经验谈:

(1) 掌握Shell脚本基本语法的方法
(2) 掌握Shell脚本的各种常见语法。
(3) 形成自己的脚本开发风格。
(4) 从简单做起,简单判断,简单循环。
(5) 多模仿,多放下参考资料练习,多思考。
(6) 学会分析问题,逐渐形成编程思维。
(7) 编程变量名字要规范,采用驼峰语法表示。
(8) 不要拿来主义,特别是新手。

第二章 Shell脚本初步入门

1、 什么是Shell?

Shell是一个命令解释器,作用是解释执行用户输入的命令以及程序,用户每输入一条Shell就解释执行一条。

2、 什么是Shell脚本?

当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序就被称为Shell脚本。用户可以在Shell脚本中敲入一系列的命令及命令语句组合。这些命令、变量和流程控制语句等有机地结合起来,就形成了一个功能强大的Shell脚本。

P8案例2-3

第一关,必须是root才能执行脚本,否则给出友好提示并终止脚本运行。
第二关,成功切换目录,否则给出友好提示并终止脚本运行。
第三关,清理日志,如清理成功,则给出正确提示。
第四关,通关或失败,分别给出相应的提示。

2.1 Shell脚本在Linux运维工作中的地位:

Shell脚本语言很适合用于处理纯文本类型的数据。

2.2 脚本语言的种类:

Shell脚本语言是弱类型语言(无需定义变量的类型即可使用)。
(1) Bounrne shell
Bourne shell又包括Bourne shell(sh)、Korn shell(ksh)、Bounrne Again Shell (bash)。
(2) C shell
C shell又包括csh、tcsh两种类型。

Linux系统中的主流Shell是bash。

2.3 其他常用的脚本语言种类:

(1)PHP语言。
(2)Perl语言
(3)Python语言

2.4 Shell脚本语言优势:

Shell脚本语言的优势在于处理偏操作系统底层的业务。使用Shell开发会更简单、更快捷。例如:让软件一键自动化安装、优化,监控报警脚本,软件启动脚本,日志分析脚本等。使用Shell更符合Linux运维简单、易用、高效的三大基本原则。

PHP语言的优势在于小型网站系统的开发,只能应用于网页。

Python语言的优势在于开发较复杂的运维工具软件。

Java适用于中大型网站开发。

书写规范:

1、脚本里加#!/bin/bash
2、bash a.sh
3、. /a.sh 默认也是bash。Linux默认就是bash。

bash和sh的区别:

CentOS7:sh是bash的软链接。

bash –version    #查看bash版本。

Shell脚本的基本执行流程:

image.png

执行脚本的5种方法

方式1:不需要执行权限
[root@web01 ~]# sh oldboy.sh #推荐

I am oldboy

[root@web01 ~]# bash oldboy.sh

I am oldboy
方法2:
[root@web01 ~]# cat oldboy.sh|bash

I am oldboy
方法3:输入重定向
[root@web01 ~]# sh <oldboy.sh

I am oldboy
方法4:执行权限
[root@web01 ~]# /root/oldboy.sh

-bash: /root/oldboy.sh: 权限不够

[root@web01 ~]#

[root@web01 ~]#

[root@web01 ~]# chmod +x /root/oldboy.sh

[root@web01 ~]# /root/oldboy.sh

I am oldboy
方法5:
[root@web01 ~]# . /root/oldboy.sh

I am oldboy

[root@web01 ~]# source /root/oldboy.sh

I am oldboy

结论:通过source或”.”加载执行过的脚本,由于是在当前Shell中执行脚本,因此在脚本结束之后,脚本中的变量(包括函数)值在当前Shell中依然存在,而sh和bash执行脚本都会启动新的子Shell执行,执行完后退回到Shell。因此,变量(包括函数)值无法保留。在进行Shell脚本开发时,如果脚本中有引用或执行其他脚本的内容或配置文件的需求时,最好用”.” 或source先加载该脚本或配置文件,处理完之后,再将他们加载到脚本的下面,就可以调用source加载的脚本及配置文件中的变量及函数等内容了。

P18范例2-5

结论:
(1)儿子Shell脚本会直接继承父亲Shell脚本的变量、函数(就好像是儿子随父亲姓,基因也会继承父亲的)等,反之则不可以。
(2)如果希望反过来继承(就好像是让父亲随儿子姓,让父亲的基因也继承儿子的,)就要用source或”.”在父亲Shell脚本中事先加载儿子的Shell脚本。

Shell脚本开发的基本规范及习惯

(1) Shell脚本的第一行是指定脚本解释器。
(2) Shell脚本的开头会加版本、版权等信息。
(3) 在Shell脚本中尽量不用中文(不限于注释)。
(4) Shell脚本的命名应以.sh为扩展名。
(5) Shell脚本应存放在固定的路径下.

第三章 Shell变量的核心基础知识与实践

什么是Shell变量?

变量就是用一个固定的字符串(也可能是字符、数字等的组合)代替更多、更复杂的内容,该内容里可能还会包含变量、路径、字符串等其他的内容。

变量类型:

(1) 环境变量(全局变量):可以创建它们的Shell及其派生出来的任意子进程Shell中使用,环境变量又可分为自定义环境变量和bash内置的环境变量。
(2) 普通变量(局部变量):只能在创建它们的Shell函数或Shell脚本中使用。普通变量一般由开发者在开发脚本程序时创建。

环境变量:

环境变量一般是指export内置命令导出的变量,用于定义Shell的运行环境,保证Shell命令的正确执行。Shell通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等。

因为系统需要,自身存在的变量。

按照规范,所有环境变量名字均采用大写形式。

自定义环境变量

定义方法1:
 [root@web01 ~]# export OLDBOY=1

 [root@web01 ~]# echo $OLDBOY

 1
定义方法2:
 [root@web01 ~]# OLDGIRL=2

 [root@web01 ~]# export OLDGIRL

 [root@web01 ~]# echo $OLDGIRL

 2
定义方法3:
 -x to make NAMEs export

 [root@web01 ~]# declare -x OLD=3

 [root@web01 ~]# echo $OLD

 3
环境变量永久生效
 (1)/etc/profile

 (2)~/.bash_profile

 (3)~/.bashrc

 (4)/etc/bashrc

#  优先顺序(4)到(1)

环境变量的知识小结:

(1) 变量名通常要大写。
(2) 变量可以在自身的Shell及子Shell中使用。
(3) 常用的export来定义环境变量。
(4) 执行env默认可以显示所有的环境变量名称及对应的值。
(5) 输出环境变量时用“$变量名”,取消环境变量时用“unset变量名”。
(6) 书写crond定时任务时要注意,脚本要用到的环境变量最好现在所执行的Shell脚本中重新定义。
(7) 如果希望环境变量永久生效,则可以将其放在用户环境变量文件或全局环境变量文件里。

环境变量初始化与对应文件的生效顺序:

系统运行Shell的方式一般有3种:

(1) 通过系统用户登录后默认运行的Shell。
(2) 非登录交互式运行Shell。
(3) 执行脚本运行非交互式Shell。

如果用户的Shell不是登录时启动的,就需要将变量设定等写入$HOME/.bashrc或者/etc/bashrc。

普通变量赋值一般有三种写法:不加引号,加单引号,加双引号。

在Shell中定义变量名以及为变量内容赋值的要求:

变量名一般是由字母、数字、下划线组成的,可以以字母或下划线开头,但不能是数字开头。

局部(普通)变量定义及赋值的经验小结:

(1) 若变量内容为连续的数字或字符串,赋值时,变量内容两边可以不加引号。
(2) 变量的内容很多时,如果有空格且希望解析内容中的变量,就加双引号。
(3) 希望原样输出变量中的内容时就用单引号引起内容进行赋值。
(4) 要使用反引号将赋值的命令括起来。

老男孩建议:

(1) 在脚本中定义普通字符串变量时,应尽量把变量的内容用双引号括起来。
(2) 单纯数字的变量内容可以不加引号。
(3) 希望变量的内容原样输出时需要加单引号。
(4) 希望变量值引用命令并获取命令的结果时就用反引号或$()。

一、变量名及变量内容定义小结

(1) 变量名只能为字母、数字或下划线,只能以字母或下划线开头。
(2) 变量名的定义要有一定的规范,并且要见名知意。
(3) 一般的变量定义、赋值常用双引号,简单连续的字符串可以不加引号,希望原样输出时使用单引号。
(4) 希望变量的内容时命令的解析结果时,要用反引号``,或者用$()把命令括起来再赋值。

二、Shell定义变量时使用“=”的知识。

三、打印输出及使用变量的知识

(1) 打印输出或使用变量时,变量名前要接符号,变量名后面紧接其他字符的时候要用大括号将变量部分单独括起来,在unset、export、(())等场景使用但不打印变量时不加,这个有些例外。
(2) 打印输出或使用变量时,一般加双引号或不加引号,如果是字符串变量,最好加双引号,希望原样输出时使用单引号。

[root@webol ~]# oldboy="I am oldboy"

[root@webol ~]# echo $oldboy

I am oldboy

1、 变量名

变量名组成、定义规范

2####、 等号

赋值符,两边不能有空格

3、 变量内容

单引号、双引号、反引号、不加引号

4、 输出变量内容

变量名加$符号,如果变量后面有内容,用{}引用变量部分。
单引号、双引号、反引号、不加引号
用echo或者printf

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容