Shell脚本编程

Shell脚本编程

## 一、编程语言的分类
编程语言的分类,根据其分类标准的不同,也有不同种分法。
1. 编程语言根据其运行方式,大概分为两类:
(1) 编译运行:源代码 –> 编译器(编译) –> 程序文件
(2) 解释运行:源代码 –> 运行时启动解释器,由解释器边解释边运行

二者优劣比较:

运行方式 | 执行速度 | 变更灵活度
———— | ———— | ————–
编译运行 | 快 | 低
解释运行 | 慢 | 高
> 为了解决编译运行的灵活性问题,避免一个大程序修改少量代码要耗时数小时进行重新编译,很多项目中,都对代码进行分段编译。当需要修改局部代码时,只需重新编译其所属段即可完成重新编译动作,减少了编译的耗时,提高了使用效率。
2. 根据其编程过程中功能的实现是调用库还是调用外部的程序文件来分类:
(1) shell脚本编程:利用系统上的命令及程序编程组件进行编程;
(2) 完整编程:利用自身库或编程组件进行编程;

3. 根据编程模型进行分类:
(1) 面向过程式编程语言:以指令为中心,来组织代码,数据服务于指令;
其中包括:
顺序执行、选择执行、循环执行
(2) 面向对象式编程语言:以数据为中心,来组织代码,指令服务于数据;
这种编程语言,首先要有对象,然后将对象实例化出来,取名为类(class),再开发出针对类的一些处理方法,取名为方法(method),通过method去管理class。例如:Java、C++、Python

## 二、文本编辑器
Linux系统中有很多文本编辑器
(1) **nano**:GNU nano 是一款小巧友好的文本编辑器。nano 是 Pico 编辑器的自由克隆版本,也是 Pico 的功能增强。这款软件在屏幕下方通过操作提示,来告知用户下一步操作的快捷键。
(2) **sed**
(3) **vi** 或 **vim**
## 三、Shell脚本编程
### 1. 什么是Shell脚本编程?
Shell脚本编程实际上就是命令的堆积,命令多不具有幂等性,需要用程序逻辑来判断运行条件是否满足,以避免其运行中发生错误。

### 2. Shell脚本编程的特点
(1) 是过程式编程语言
(2) 通过解释运行方式运行在Linux系统中
(3) 依赖于外部程序文件运行

### 3. 如何写shell脚本?
(1) 脚本文件的第一行
顶格,给出shebang(解释器路径),用于指明解释器执行当前脚本的解释器程序文件。
常见解释器首行格式
bash : #!/bin/bash
python : #!/usr/bin/python
perl : #!/usr/bin/perl
(2) 运行Shell脚本
方法1 : 赋予脚本执行权限,并直接运行此程序文件。例如:chmod +x /PATH/TO/SCRIPT_FILE
方法2 : 通过解释器直接运行。例如:bash /PATH/TO/SCRIPT_FILE
> 注意:
脚本中的空白行将会被解释器忽略,想换行的可以单起一行输入echo;
脚本中,除了shebang,余下所有以#开头的行,都将被视作注释行而被忽略,即为注释行;
shell脚本的运行时通过运行一个子shell进程实现的;

### 4. bash脚本编程之配置文件
**登陆类型分类**:
(1) 交互式登录shell进程:
– 直接通过某终端输入账号和密码后登陆打开的shell进程;
– 使用su命令:su – USERNAME或者使用su -l USERNAME执行的登陆切换;

(2) 非交互式登陆shell进程:
– 使用su USERNAME执行的登陆切换;
– 在图形界面下打开的终端;
– 运行脚本;

**bash配置文件分为两类**:
(1) **profile类**:为交互式登录的shell提供配置
**profile类配置文件**

类型 | 作用范围 | 文件
—— | ———— | ——
全局配置 | 对所有用户都有效 | /etc/profile, /etc/profile.d/*.sh
用户个人配置 | 仅对当前用户有效 | ~/.bash_profile
profile类的功用:
– 用于定义环境变量
– 用于运行命令或脚本

(2) **bashrc类**:为非交互式登陆的shell进程提供配置
**bashrc类配置文件**

类型 | 作用范围 | 文件
—— | ———— | ——
全局配置 | 对所有用户都有效 | /etc/bashrc
用户个人配置 | 仅对当前用户有效 | ~/.bashrc
bashrc类的功用:
– 定义本地变量
– 定义命令别名

> 注意:
仅管理员可修改全局配置文件。

**配置文件读取顺序**
交互式登录shell进程的配置文件读取顺序:
/etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc
非交互式登录shell进程的配置文件读取顺序:
~/.bashrc –> /etc/bashrc –> /etc/profile.d/*.sh
>注意:
配置文件的生效是:以最后读取的配置为最终生效配置;
在命令行中定义的特性,例如变量和别名作用域为当前shell进程的生命周期;
在配置文件定义的特性,只对随后新启动的shell进程有效;

让通过配置文件定义的特性立即生效:
(1) 通过命令行重复定义一次;
(2) 让shell进程重读配置文件;
– ~]# source /PATH/TO/CONF_FILE
– ~]# . /PATH/TO/CONF_FILE

练习题:
(1) 定义对所有用户都生效的命令别名,例如:lftps=’lftp 172.16.0.1/pub’?
“`
~]# vim /etc/bashrc
在文件末尾添加如下行:
alias lftps=’lftp 172.16.0.1/pub’
~]# . /etc/bashrc
“`
(2) 让centos用户登录时,提示其已经登陆,并显示当前系统时间?
“`
~]# vim /home/centos/.bash_profile
在文件末尾添加如下行:
echo “Hi, centos!You logged into the system at $(date+%D-%T).”
“`
### 5. bash脚本编程之算数运算
算术运算有很多种,包括+, -, *, /, **(次方), %(取模,也叫取余数)。这些算数运算在linux的bash shell中无法直接使用,需要用单独的运算格式。

算术运算格式:
(1) let VAR=算数运算表达式
(2) VAR=$[算术运算表达式]
(3) VAR=$((算术运算表达式))
(4) VAR=$(expr $ARG1 $OP $ARG2)
其中,ARG1和ARG2是两个变量,$OP是算术运算法则,包括+, -, *, /, **(次方), %(取模,也叫取余数)。
注意:彼此间都要有空格!!

练习题:
(1) 写一个脚本,完成如下功能:添加三个用户,求此三个用户的UID之和;
“`
#!/bin/bash
id tom &> /dev/null || useradd tom
id jerry &> /dev/null || useradd jerry
id neo &> /dev/null || useradd neo
declare -i A=`grep “^tom” /etc/passwd | cut -d: -f3`
declare -i B=`grep “^jerry” /etc/passwd | cut -d: -f3`
declare -i C=`grep “^neo” /etc/passwd | cut -d: -f3`
let sum=$A+$B+$C
echo $sum
“`

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87467

(0)
N27_sapbcsN27_sapbcs
上一篇 2017-09-20 17:44
下一篇 2017-09-20 17:48

相关推荐

  • 进入linux世界的初步认识

    1、 描述计算机的组成及其功能.
    2、 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别.
    3、 描述Linux的哲学思想,并按照自己的理解对其进行解释性描述.
    4、 说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述.
    5、 如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的.
    6、 请罗列Linux发行版的基础目录名称命名法则及功用规定.

    Linux干货 2018-02-25
  • 文本处理工具练习题(包含正则)

    正则练习题(包含文本处理练习题) 问题 找出ifconfig命令结果中本机的所有IPv4地址  查出分区空间使用率的最大百分比值 查出用户UID最大值的用户名、UID及shell类型 查出/tmp的权限,以数字方式显示 统计当前连接本机的每个远程主机IP的连接数,并按从大 到小排序 答; ifconfig | grep -o '[0-9]\…

    Linux干货 2016-08-08
  • N23_第1周博客作业

    1、描述计算机的组成及其功能。     根据冯·诺依曼体系计算机有中央处理器、主存储器、输入/输出三个子系统组成。 1.中央处理器 CPU(Central Processing Unit)用于数据运算。CPU有控制单元、算数逻辑单元、寄存器组组成。 (1)控制单元:控制各个子系统操作 (2)算数逻辑单元:对数据进行逻辑、移位和算数运算 逻…

    Linux干货 2016-09-19
  • 根DNS域名解析的实现

    一、实现从根,com,rj.com 模拟互联网的DNS架构 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 接下来就一起开始搭建吧 首先,我们需要计划好实验环境,包括实验的步骤思路 1)实验环境(最好是画图展示,能使思路清…

    2017-04-25
  • 进程与周期任务

    STAT:进程状态: R:running S: interruptablesleeping D: uninterruptable sleeping T: stopped Z: zombie +: 前台进程 l: 多线程进程 L:内存分页并带锁 N:低优先级进程 <: 高优先级进程 s: session leader,会话(子进程)发起者 top栏位信息…

    Linux干货 2017-05-15
  • shell编程基础一(多种方法求值1+2+..+100)

    #SHELL编程基础一(多种方法求值1+2+..+100)##为什么要学好shell shell脚本语言是实现linux系统管理及自动化运维所必备的重要工具,linux系统的底层及基础应用软件的核心大都涉及shell脚本的内容。 每一个合格的linux系统管理员或运维工程师,都需要能够熟练地编写shell脚本语言,并能够阅读系统及各类软件…

    Linux干货 2017-08-26