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多网卡绑定

    为了增加网络牢固性,linux服务器通过多块网卡来实现网卡冗余或链路聚合、负载均衡的技术。网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6常用的有三种mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援…

    系统运维 2016-06-23
  • linux分区管理工具—fdisk

    一、关于为什么要分区       (1)为了数据的安全:当文件系统只有一个分区时,如果遇到分区需要格式化的情况,则硬盘里的数据无法保留,而如果提前对硬盘做了分区那么就可以很好地额解决这个问题;       (2)为了提升效率:硬盘(这里单指机械硬盘)分为外圈和…

    Linux干货 2016-03-12
  • tomcat配置详解

    主程序: ·tomcat ·tomcat-admin-webapps ·tomcat-webapps ·tomcat-docs-webapp ·java-1.8.0-openjdk 配置文件: 配置文件目录:/etc/tomcat 主配置文件:server.xml webapps存放位置:/var/lib/tomcat/webapps/ webapps的根目…

    2017-08-08
  • linux三剑客之grep

    linux三剑客之grep        所谓三剑客的工具有“grep”、“sed” 、“awk”,他们都是不谋而合的文本搜索查找处理的强大工具。grep 是 Ken Thompson 写的,他也是 Unix 的创造者。 gerp及正则表达式    grep全称(GLobal search Regu…

    Linux干货 2016-08-08
  • M22 Centos设置yum源方法

    实验目的: 使用虚拟机模拟建立yum源服务器,在客户机上指定yum源为该服务器。 实验器材: WMware12安装Centos6.8虚拟机作为yum服务源 WMware12安装Centos7.3 作为客户端访问yum源服务器 实验原理图: 实验过程: 服务器端: 1、  显示已经挂载的光盘 #cd /misc/cd #先执行此命令才可以看到光盘挂载…

    2017-03-06
  • 第三周作业

      1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d" " -f1 | sort -u who | cut -d" " -f1 | uniq 2、取出最后登录到当前系统的用户的相关信息。    who | tail -1 …

    Linux干货 2016-11-19