大话bashshell脚本编程

程序的主要部件:

          1、变量
	  2、条件测试
	  3、语句:如:if、for、while、case

一、变量

变量是任何一门语言中的一个重要组成部分。定义变量就是在内存空间中开辟空间,使用该空间来存储程序运行中的中间数据的。

既然是存储数据的空间了,那么开辟的内存空间应该有二个特点:

1、在内存中开辟的空间的大小。

声明变量的类型,其实就决定了在内存中开辟的空间的大小了。

如:int var

这就决定了变量var,能够存储的数据长度为65535.在强类型的语言中,使用变量时必需要声明变量的类型,再使用。该变量只能存储指定的类型的数据。

如果该变量存储的数据大于开辟的内存空间的话,就会溢出。也就是造成数据的丢失。这是在定义变量的时候要注意的。

Bashshell是弱类型的语言,使用变量存储程序执行的中间数据不需要事先声明就可以直接使用了。默认变量是字符类型的。

如:

引用命令的执行结果,给变量:freeMem赋值。

    [[email protected] ~]# freeMem=$(free -m | awk ‘/^Mem/{print ($4+$6+$7)/$2}‘)

查看变量freeMem的值

   [[email protected] ~]# echo $freeMem
     0.883534

输出变量freeMem加1的结果。

     [[email protected] ~]# echo "${freeMem} + 1"
     0.883534 + 1

说明:

从结果中,可以看出只是做字符的连接。所以,Bashshell的变量默认是字符类型的。

2、在内存中开辟的空间的存活时长。

这就是所谓:“程序中变星的作用范围”。

全局变量(环境变量)       使用【export 】导出,任何shell都要以访问。
本地变量                 只对当前shell进程有效;对其它shell进程无效,
                         包括当前shell进程的子进程。
局部变量                 对shell脚本中某代码片断有效;使用【local】说明该变量变局部变量。
                         通常用于本地变量。

我们知道了,变量的作用范围之后,在程序的啥位置可以引用到该变量的值。当我们要使用到变量存储程序的执行的中间数据的时候:

如果需要在程序的不同位置(主程序中、函数中)引用变量的话,就要把变量定义为本地变量。如果,把该变量定义成局部变量的话,存储的数据就会丢失了。

如果我们在函数中使用到变量,且只在该函数体中引用该变量的话,就不必要把变量定义成本地变量了,应该把它变量设置为:局部变量。只在函数体中有效。当主程序调用该函数完成之后,该变量所占用的内存空间就被释放了。不竞内存是有限的。这也是程序优劣的一个体现。

testVar() {
       local pid base= user= nice= bg= pid_file=
 }

既然,bashshell的变量默认是字符类型的。那么怎么对变量做运行算术运算呢?

做算术运算的条件:必需是数值型。

所以,在做算术运算之前要做变量类型的转换。

例:

[[email protected] ~]# a=2
[[email protected] ~]# b=3

做字符的连接

[[email protected] ~]# echo "$a$b"
23

使用$[],告诉bashshell要对变量:$a、$b 做算术运算。bashshell在做算术运算之前就对这两个变量的类型做隐式转换,之后才做算术运算的。

[[email protected] ~]# echo "$[$a + $b]"
5

说明:

对字符类型的变量:$a、$b做算术运算,要先进做数据类型转换再做算术运算的。如果,我们明确知道这两个变量记录的数据是用来做算术运算的话,在使用变量之前最好声明变量的类型,这避免了做数据类型转换的过程。我们的程序执行是不是快一点呀?

还有一个好处,是节约内存空间:

                      把123当做数值类型存储的话:一个字节8位就可以存储数值型 123
                      把123当做字符存储存储的话:要三个字节才可以存储字符型 123

所以,我们如果明确知道变量的存储类型的话,最好声明该变量是用来存储什么类型的数据的。

如:

   [[email protected] ~]# declare -i sum=0
   [[email protected] ~]# let sum+=4
   [[email protected] ~]# declare -p sum
   declare -i sum="4"
   [[email protected] ~]# echo $sum
    4

三、bashshell的条件测试。

程序中有了判断语句(if)、循环语句(for,until,while)、选择语句(case),这些语句都可以互相嵌套使用,这就使得程序的逻辑功能非强强大,能模拟很多人的行为,这就是自动化的实现。

但是它们的最核心是就是探测某一事物的“真/假”执行不同的行为(也就是这些做条件测试)。那么,在 bashshell中:0 表示:真。非0,表示假。这与其它编程语言是相背的。

用到if、for、until、while,的前提是要先了解:如何做条件测试。:

1、字符串的比较、匹配、判断:

(1)、字符串的判断

      -n  string           字符串不为空得为真
      -z  string           字符串为空则为真

(2)、字符串的比较

比较在ACIL码表当中,谁靠前谁靠后。

	  string1 == string2   比较两字符串是否相同
	  string1 >  string2   比较字符串string1是否在string2的前面。
	  string1 <  string2

(3)  字符串的匹配

          string =~ PATTERN

2、数值的比较

整数比较测试:

     -gt -----> 大于    Greater Than
     -ge -----> 大于等于  Greater or Equal
     -lt -----> 小于      Lesser Than
     -le -----> 小于等于  Lesser or Equal
     -eq -----> 等于 equal
     -ne -----> 不等于 Not Equal

3、文件的判断.

Linux有一个很重要的哲学思想:一切皆文件,所以bashshell也提供了很丰富的文件测试功能

     
     -e     FILE          测试一个目录文件是否存在。 exists
     -f     FILE          测试一个文件是否是普通文件
     -d     FILE          测试一个文件是否为目录
     -h/-l  FILE          测试一个文件是否为符号连接
     -r     FILE          测试当前用户是否对该文件有读权限
     -w     FILE          测试当前用户是否有写权限
     -x     FILE          测试当前用户是否有执行权限
     -s     FILE          测试一个文件是否是套接字文件且存在才返回真(0)
     -b     FILE          测试一个文件是否是块设备文件且存在才返回真
     -c     FILE          存在并且字符设备则返回真

4、命令的执行状况(成功与否)

# COMMAND
# echo $?   -------> 如果:$?为:0 的话。就代表上面的命令执行成功的。否则是执行失败的。

脚本是做条件测试使用的符号与命令:

条件测试的结果通常是布尔型的:真或假

1、test expression(表达式)      测试表达式是真不是假
2、[ expression ]               注意:expression两边要有空格
3、[[ expression ]]

注意单双中括号是有区别的:

一个中括号类型于bash shell 的内置命令

两个中括号是bash shell的关键字。可以使用类型正则表达式来测试

如:

[[email protected] ~]# read -p "Plz enter varValue: " var
Plz enter varValue: yes
[[email protected] ~]# [[ "$var" =~ [Yy][Ee][Ss] ]] && echo "ok"
ok
[[email protected] ~]# read -p "Plz enter varValue: " var
Plz enter varValue: Yes
[[email protected] ~]# [[ "$var" =~ [Yy][Ee][Ss] ]] && echo "ok"
ok

4、组合条件测试

组合条件测试:在多个条件间实现逻辑运算

  (1)、与: [ conditionl -a condition2 ]   两个为真才为真
        或使用 condition1 && condition2
 (2)、或: [ conditionl -o condition2 ]   只要一个为真则为真
              condition1 || condition2

三、构造逻辑强大的程序

知道了bash shell 的条件测试,就可以使用:if、for、until、while、case 等语句互相嵌套,根据条件测试的真假和使用变量记录程序运行过程中的数据,来构造逻辑性很强的程序了。

当然,我们要学会这些语句的使用。

1、if语句有三种格式:--------> 做”判断“

(1)、单分支 if 语句

	if 测试条件; then
		选择分支
	if

注意:分号(;)是语句结束符。因为 then 是另一个语句。与 if 写在一行。所以要使用分号。

(2)、双分支的 if 语句.(两个分支仅执行其中之一)

  if  测试条件;then
       选择分支
   else
       选择分支
   if

(3)、多分支

if   条件1;then
     分支1
elif  条件2; then
      分支2
...
else
      分支n
fi

2、for语句的格式

for VAR_NAME in LIST;do
    循环体
done

3、while适用于循环次数未知,或不便用for直接生成较大的列表时;

while 测试条件; do
      循环体
done

4、case ---------------> “做选择”

  case 变量引用 in
     PATTERN1)  --------> 可以做字符比较或模式匹配
         选择分支1 
         ;;
     PATTERN2)
         选择分支2
	 ;;
      ...
      *)
         选择分支n
	 ;;
  esac

大话bashshell脚本编程

时间: 2024-10-05 15:24:03

大话bashshell脚本编程的相关文章

《Linux命令行与shell脚本编程大全》23章24章

第二十三章 使用其他shell bash shell是linux发行版中最广泛使用的shell.但是它并不是唯一的选择,还有其他的shell可以供你选择. 23.1 什么是dash shell 百度百科上说:Dash shell是一个Unix shell,比Bash shell小的多,符合POSIX标准. 下面是书上的: dash shell是作为debian linux发行版的一部分开发的,主要出现在Ubuntu linux发行版中.它是Bourne shell的精简版.所以它并不像bashs

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外

Shell脚本编程知识点总结及范例

 一:关于语言 1)编译性语言 编译型语言多半运作于底层,所处理的是字节.整数.浮点数或其它及其机器层经的对象.处理过程为:源程序--预处理--编译--汇编--链接,编译性语言为静态语言. 2)解释性语言 解释性语言读入程序代码并将其转化为内部的形式加以执行.处理过程:解释性(文本文件)-解释器去读取并执行.解释性语言为动态语言. 二:基础 变量类型 linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高级编程语言中变量的使用)bash变量类型分为本地变量和环境变量. 本地变量

Linux01-BASH脚本编程之信号捕捉及任务计划53

一.脚本编程知识点 1.获取变量中字符的长度:${#VARNAME} 2.变量赋值: a)${parameter:-word}:如果parameter为空或未定义,则变量展开为"word":否则,展开为parameter的值: 如:A=3 echo ${A:-30} unset A echo ${A:-30} b)${parameter:+word}:如果parameter为空或未定义,不做任何操作:否则,则展开为"word"值: 如:echo ${A:+30} A

shell脚本编程——流程控制

shell脚本编程--流程控制 目   录 一. if 二. case 三. for 四. while 五. until 六. 综合应用 一.if 1.语法 (1)单分支 if  判断条件:then fi (2)双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi (3)多分支 if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; then 条件为真的分支代码 else 以上条件都为假

shell脚本编程的选择分支结构

选择执行结构: if语句单分支结构:如果条件为真,则执行then后的命令,否则,不做任何操作: if CONDITION :then STATEMENT fi 或 if CONDITION ; then STATEMENT1 STATEMENT2 ... fi 注意:想要执行then后面的STATEMENTS,前提条件是CONDITION部分为真: if语句的双分支结构:如果条件为真,就执行then后面的命令:否则就执行else后面的命令: if CONDITION ; then STATEME

shell脚本编程的一些好习惯

shell脚本编程的一些好习惯 1.命名规则 脚本命名以.sh结尾,名称尽量见名之意.以下是几种可供参考的脚本命名风格.通过以下清新脱俗的风格,读者能够很easy的明白脚本的作用.         clearlog.sh          ClearLog.sh          clearSql.sh         snmp_install.sh         Monitor.sh 2.脚本信息 为脚本加入生动的信息,比如脚本功能的描述,作者,时间,版本信息等.     #!/bin/ba

shell脚本编程之基础篇(二)

shell脚本编程之基础篇(二) ============================================================================== 概述: ============================================================================== 退出状态 ★进程使用退出状态来报告成功或失败 ◆0 代表成功,1-255代表失败 ◆$? 变量保存最近的命令退出状态 (查看:echo $?)

Linux系统shell脚本编程——生产实战案例

Linux系统shell脚本编程--生产实战案例     在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要结合shell脚本来实现批量检查的功能,那么今天就来做个小小的实验. 1.开发脚本前准备 一般大家都知道,测试主机是否在线,常用的命令无非就是ping.nmap,因此,首先找一个地址来测试下ping命令的效果 [[email protected] scripts]