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

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

  1. 什么shell脚本?

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

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

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

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

2  shell脚本的规范格式

#!环境申明

# 注释文本

可执行代码

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

[[email protected] 桌面]#vim /root/helloworld.sh

#!/bin/bash

echo "Hello World !!"

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

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

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

[[email protected] 桌面]#chmod  +x /root/helloworld.sh

[[email protected] 桌面]#/root/helloworld.sh

Hello World !!

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

3  shell脚本的基本创建过程

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

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

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

4 简单脚本技巧

管道传递

使用 | 管道操作

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

例如:

#!/bin/bash

useradd student

echo 123 | passwd --stdin student

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

重定向输出

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

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

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

例如:

[[email protected] 桌面]#cat /opt/1.txt /etc/ > /opt/2.txt

cat: /etc/: 是一个目录

[[email protected] 桌面]#cat /opt/2.txt

123

[[email protected] 桌面]#cat /opt/1.txt /etc/ 2> /opt/2.txt

123

[[email protected] 桌面]#cat /opt/2.txt

cat: /etc/: 是一个目录

[[email protected] 桌面]#cat /opt/1.txt /etc/ &> /opt/2.txt

[[email protected] 桌面]#cat /opt/2.txt

123

cat: /etc/: 是一个目录

变量

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

什么是变量?

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

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

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

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

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

– 等号两边不要有空格

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

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

查看和引用变量

– 引用变量值:$变量名

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

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

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

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

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

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

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

位置变量:

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

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

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

#!/bin/bash

echo $1

echo $2

echo $3

运行结果如下:

[[email protected] 桌面]#/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 $*

运行结果如下:

[[email protected] 桌面]#/root/ps.sh 1 2 3

1

2

3

3

1 2 3

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

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

例如:

[[email protected] 桌面]#cat /mnt

cat: /mnt: 是一个目录

[[email protected] 桌面]#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脚本的编写涉及到很多知识,这里先介绍一些基础简单的知识与运用。

时间: 2024-08-27 16:37:04

shell脚本基础的简单介绍与简单应用的相关文章

Linux shell脚本基础学习详细介绍(完整版)一

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Linux 脚本编写基础◆1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执

Linux shell脚本基础学习详细介绍(完整版)二

详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续. Linux shell脚本基础已经被分成好几个部分了,这里对控制流程的内容也就马上讲完了,这是最后一部分关于here document,这里举例稍微有点复杂,我们慢慢来分析这个复杂Linux shell脚本. 6. Here documents 当要将几行文字传递给一个命令时,here docu

什么是Shell?Shell脚本基础知识详细介绍

这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 它虽然不是Linux系统核心

shell 脚本基础知识详细介绍(二)

SimonSu 博客 评论墙 读者墙 链接 关于 linux中的sh脚本语法 玩linux都知道sh脚本的方便,但如何编写sh脚本却是像我这样的新手和菜鸟的难题.能不能编写得出来是一回事,了不了解又是另一回事.抱着好好学习,天天向上的精神,大家有空就看看吧,没有坏处的.下面来抄来一大段sh脚本的语法说明.慢慢看: 一.开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编写脚

shell脚本基础学习(转)

看到别人的学习总结,觉得不错转了过来(转自TryFly) 一.shell脚本基础 ? ?shell脚本是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正则表达式,管道命令以及重定向向等功能,以达到我们所想要的处理目的.它的基本用途有: 1.自动化常用命令 2.执行系统管理和故障排除 3.创建简单的应用程序 4.处理文本或文件 ... 二.创建shell脚本 第一步.使用文本编辑器来创建文本文件 第一行必须包括shell 声明序列:#!

shell脚本基础进阶(四)----作业

20150913-15作业 1.描述shell程序的运行原理(可附带必要的图形说明) shell脚本基础进阶(一)----shell介绍 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟) shell脚本基础进阶(二)----变量及运算符 3.总结课程所讲的所有循环语句.条件判断的使用方法及其相关示例:(if (jpg|png is not exist):echo "You say a XX") shell脚本基础进阶(三)----流程控制语句

关于shell脚本基础编程第四篇

shell脚本基础编程第四篇本章主要内容:函数 函数 function:             function 名称 { 命令 ; } 或 name () { 命令 ; }           定义 shell 函数.               创建一个以 NAME 为名的 shell 函数.当作为一个简单的命令启用时,           NAME 函数执行调用 shell 的上下文中的 COMMANDs 命令.当 NAME           被启用时,参数作为 $1...$n 被传递

Linux运维之道之ENGINEER1.4(shell脚本基础)

ENGINEER1.4 SHELL脚本基础 认识shell环境 bash shell的使用方式 交互式: --人工干预,智能化程度高 --逐条解释执行,效率低 非交互式: --需要提前设计,智能化难度大: --批量执行,效率高: --方便在后台及悄悄地执行: 什么是shell脚本:提前设计可执行语句,用来完成特定任务的文件 --解释型程序 --顺序,批量执行 规范shell脚本的一般组成: #!环境声明 #注释文本 可执行代码 ----------------------------------

续写vim,shell脚本基础编辑,read命令,if与case判断语句,文件查找方式,压缩与解压,

一. Vim续写 ?1.命令扩展模式的位置定界 ??起始位置 cmd 终止位置???Cmd:????y复制????d删除????Gu变大写????gu变小写??例如:0y$命令意味着:????0 先到行头????Y 从这里开始拷贝????$ 拷贝到本行行尾最后一个字符????Ye 从当前位置拷贝到本单词的最后一个字符 ?2.扩展命令模式:地址定界 ? ?# 具体第#行,? ?#1,#2 从开头数第#1行到第#2行? ?#1,+#2 从开头数的第#1行到从第#1行开始数的第#2行? ? ?例:2,

Shell脚本基础(一)

前言:随着Linux系统在企业中的应用越来越多,服务器的自动化管理也越来越变得重要,在一些复杂的Linux维护工作中,大量的重复性的输出和交互式操作不但费时费力,而且容易出错,所以Shell脚本,可以批量处理,自动化完成一系列维护工作,大大减轻管理员的负担. 一,Shell脚本基础知识1,编写第一个shell脚本1),vim first.sh[[email protected] ~]# mkdir /shell //创建一个shell目录[[email protected] ~]# vim fi