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

相关推荐

  • 互联网安全之iptables/netfilter入门到进阶

    随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击、黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视。网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络世界的保护伞。下面笔者介绍下Linux系统的守卫者——iptables/netfilter。  一 兄弟齐心,其利断金  iptables/netfilter就…

    Linux干货 2017-05-06
  • 网络管理3

    一、知识整理 1、跨网络通信:路由 路由的分类:主机路由;网络路由;默认路由。 将主机接入网络,需要配置网络相关设置。一般包括如下内容:主机名;IP/MASK;路由:默认网关;DNS服务器:主、次、第三DNS服务器。 2、网络配置文件:IP、MASK、GW、DNS相关配置文件 /etc/sysconfig/network-scripts/ifcfg-IFAC…

    Linux干货 2016-09-13
  • linux一周学习总结

          对于linux,之前也完全没有接触过,完全零基础小白。来到马哥以后,进入学习也有一周时间 ,一周里老师带我们学习了很多指令,下面,我就自己的理解和老师讲授的内容对linux中的一些指令做一个简单的小总结。 一、关于SHELL Shell     查询当前系统使用了哪个shell   &n…

    2017-07-15
  • PXE网络引导系统自动化安装CentOS7

     一.PXE 注意:安装前 selinux 禁用,iptables 关闭 dhcp 服务器静态IP地址  1.PXE的工作原理:      Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC  &nbsp…

    Linux干货 2017-07-24
  • LAMP实战

    说明:本实验在单主机搭建。下面的步骤只需要你复制粘贴,即可完成实验。 1、安装httpd mkdir /tools cd /tools #获取软件包 wget -c http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.16.tar.gz wget http://m…

    Linux干货 2015-10-08
  • 文件管理和用户组权限管理小结

    文件管理 文件系统结构 /boot: 引导文件存放目录,内核文件,引导加载器都存放在此目录 /bin:供所有用户使用的基本命令,不能关联至独立分区,os启动即会用到的程序 /sbin:管理类的基本命令:不能关联至独立分区,os启动即会用到的程序 /etc:配置文件目录 /home:普通用户家目录 /root:管理员的家目录 /dev: 设备文件及特殊文件存储…

    2017-07-23