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

相关推荐

  • puppet部署多台服务器

    利用puppet实现自动化部署 配置前准备:   图中:蓝线表示各个服务器之间通信      红线表示puppetmaster主机向各个agent主机部署信道 A主机puppet-master主机:192.168.126.129 B主机做两种服务:keepalived高性能和nginx反代  &nb…

    2017-07-23
  • class17 网络管理(二)

    IP 地址 它们可唯一标识IP网络中的每台设备 每台主机(计算机、网络设备、外围设备)必须具有唯一的地址           IP 地址由两部分组成:     • 网络ID:   …

    Linux干货 2016-09-06
  • 26期全程班-第六周博客作业

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; # cp /etc/rc.d/rc.sysinit /tmp # vim /tmp/rc.sysinit :%s@^\([[:space:]]\+\)@#\1@g 2…

    Linux干货 2017-03-07
  • CentOS 系统启动流程

    CentOS 系统启动流程 一、Linux系统的组成部分:内核+根文件系统 1.内核: 进程管理:进程之间的通信为:IPC(Inter Process Communication)机制,有消息队列、semerphor、shm、socket(跨主机之间的通信) 内存管理; 网络管理; 文件系统; 驱动程序; 安全功能; 2.运行中的系统环境可分为两层:内核空间…

    Linux干货 2016-09-13
  • 编译安装Linux内核

    实验前准备:在https://www.kernel.org/下载内核 这里我们下载的是:linux-4.14.10.tar.xz du -sh /app/linux.tar/ 此命令可查看内核文件大小 编译完成后/lib/modules下会生成4.14.10版的内核 1,tar xvf linux-4.14.10.tar.xz -C /app/解压缩准备好的…

    2018-01-03
  • linux启动和内核管理

    linux启动和内核管理:1. 加载BIOS 的硬件信息,获取第一个启动设备2. 读取第一个启动设备MBR 的引导加载程序(grub) 的启动信息3. 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备4. 核心执行init 程序,并获取默认的运行信息5.init 程序执行/etc/rc.d/rc.sysinit 文件6. 启动核心的外挂模…

    Linux干货 2017-03-28