码迷,mamicode.com
首页 > 系统相关 > 详细

shell脚本基础的简单介绍与简单应用

时间:2017-11-10 10:53:27      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:shell 变量 基础

 Shell脚本是Linux中很重要的一种“程序”。

  1. 什么shell脚本?

shell脚本是提前设计的可执行语句,用来完成特定任务的文件。

Shell脚本可分为交互式和非交互式

交互式:指脚本在运行时,需要一些人为的参与,比如,键盘输入数据,确认选项等。因为有人为的参与,所以运行时更加智能化,但是同时效率会降低

 

非交互式:指脚本运行时不需要人为干预,批量执行,效率高,但提高智能化难度大

 

2  shell脚本的规范格式

#!环境申明

# 注释文本

可执行代码

以上就是shell脚本的规范格式,也就是说你不管写什么脚本,一上来就可以把第一个环境申明写好。例如编程里最有名的一个程序‘Hello World’,这个不管学什么语言,貌似都是最开始写的一个程序。

[root@localhost 桌面]#vim /root/helloworld.sh

#!/bin/bash

echo "Hello World !!"

这样我们就写好了我们的第一个shell脚本。

Shell脚本中我们通常都是以.sh结尾,因为可以一看就知道是shell脚本但也不是非要以.sh结尾,可以在名称后面什么都不加

但shell脚本不是也写好就可以运行,在linux中还是要涉及到读写执行权限的,一般shell脚本写完后,系统是默认为一个基本文件的,我们需要赋予它可执行权限后,才可以运行该脚本,所以:

[root@localhost 桌面]#chmod  +x /root/helloworld.sh

[root@localhost 桌面]#/root/helloworld.sh

Hello World !!

这样一个完整的可运行的脚本就写好了

 

3  shell脚本的基本创建过程

明确任务需求:先做什么,后做什么

 

编写代码文件:每个步骤的实现,然后转换成命令行的形式保存在脚本中

 

测试并完善:根据运行结果排除错误,再进行代码优化,用户友好处理

 

4 简单脚本技巧

管道传递

使用 | 管道操作

– 将前一条命令的标准输出交给后一条命令处理

 

 

例如:

#!/bin/bash

useradd student

echo 123 | passwd --stdin student

这个脚本是自动创建用户student,并设置好密码为123.此处管道的作用就是将123交给passwd,用来设置为密码

 

重定向输出

  >:只收集前面命令的正确输出

 2>:只收集前面命令的错误输出

 &>:收集前面命令的错误与正确输出

例如:

 [root@localhost 桌面]#cat /opt/1.txt /etc/ > /opt/2.txt

cat: /etc/: 是一个目录

[root@localhost 桌面]#cat /opt/2.txt

123

 

[root@localhost 桌面]#cat /opt/1.txt /etc/ 2> /opt/2.txt

123

[root@localhost 桌面]#cat /opt/2.txt

cat: /etc/: 是一个目录

 

[root@localhost 桌面]#cat /opt/1.txt /etc/ &> /opt/2.txt

[root@localhost 桌面]#cat /opt/2.txt

123

cat: /etc/: 是一个目录

 

变量

在实际的编写脚本过程中,往往会涉及到许多数据,但这些数据都是同一类型,比如,一个班的考试成绩,许许多多的用户名等等,这些数据要是每个都为其写个脚本是繁琐的,而且是重复性操作,这是就需要一种“容器“,可以存放这些数据,并且随着数据的变化,其内容也跟着变化

什么是变量?

变量简单来说就是以不变的名称存放可能变化的值

基本形式:变量名=变量值

作用:方便以固定的名称重复使用某个值,提高对任务需求,运行环境变换的适应能力

 

定义变量时需要的注意的问题:

– 若指定的变量名已存在,相当于为此变量重新赋值

– 等号两边不要有空格

– 变量名由字母/数字/下划线组成,区分大小写

– 变量名不能以数字开头,不要使用关键字和特殊字符

 

 

查看和引用变量

– 引用变量值:$变量名

– 查看变量值:echo $变量名、echo${变量名}

 

变量的分类(运维角度):

环境变量:用来设置用户/系统环境

位置变量:在执行脚本时提供的命令行参数(非交互式传值)

预定义变量:用来保存脚本程序的执行信息,系统内置,我直接调用,无法更改

自定义变量:用户自主设置,随意更改、使用

 

这里先介绍位置变量与预定义变量

位置变量:

首先我们要知道位置变量到底指的是什么?

 

在linux中,变量是不能用纯数字来命名的,原因是数字都被用来定义位置变量了。

比如,我编写了一个/root/ps.sh的脚本内容如下:

 

#!/bin/bash

echo $1

echo $2

echo $3

运行结果如下:

[root@localhost 桌面]#/root/ps.sh 1 2 3

1

2

3

可以看出,我在脚本后面输入了三个数:1,2,3

输出结果是1,2,3

所以位置变量指的是在脚本后每个位置都是一个变量,第一个位置是变量1,第二位置是变量2,以此类推。

注:每个位置间是用空格区分的,不然再长的字符都是一个位置

所以上述的脚本是在屏幕上显示出位置变量1,2,3的内容

 

预定义变量:

 $#  已加载的位置变量的个数

 $*  所有位置变量的值

 $?  程序退出后的状态值,0表示正常,其他值异常

例如,下面的脚本:

#!/bin/bash

echo $1

echo $2

echo $3

echo $#

echo $*

运行结果如下:

[root@localhost 桌面]#/root/ps.sh 1 2 3

1

2

3

3

1 2 3

可以看出,变量$#的作用是统计已使用的位置变量的个数,而$*的作用是将所有已使用的位置变量内容输出到屏幕上

 

变量$?作用比较特殊,如果一个程序正常输出结果,没有报错,系统会用“0”值对应这个结果,表明程序无异常,如果程序报错或出了其他状况,就会用其他非零值来表示这个结果。而储存这些值的就是变量$?。平时我们是看不见这个变量的,我们可以用echo $?的形式将这个值显示出来。

例如:

[root@localhost 桌面]#cat /mnt

cat: /mnt: 是一个目录

[root@localhost 桌面]#echo $?

1

Cat命令是用来查看文件的内容的,用来查看目录时是会报错的,这时,用echo $?就可以看到此时变量$?的值为1。这个变量是保存最后一个程序的输出状态,前面程序运行所产生的值会被覆盖。

 

在写脚本时,经常会涉及到关于比较与判断的选项,这里介绍关于这些的一些命令选项:

检查文件状态

-e:文档存在为真

-d:文档存在且为目录为真

-f:文档存在且为文件为真

-r:文档存在且有读取权限为真

-w:文档存在且有写入权限为真

-x:文档存在且有执行权限为真

 

比较整数大小(带e都有等于二字,g代表大于,l代表小于)

-gt:大于------------------>>greater than;

-ge:大于等于------------->>greater than or equal to

-eq:等于---------------->>equal;

-ne:不等于--------------->>not equal

-lt:小于--------------------->>less than

-le:小于等于-------------->>less than or equal to

 

字符串比对

== :相等

!=:不相等

Shell脚本的编写涉及到很多知识,这里先介绍一些基础简单的知识与运用。


shell脚本基础的简单介绍与简单应用

标签:shell 变量 基础

原文地址:http://13424824.blog.51cto.com/13414824/1980480

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!