bash脚本编程之一变量、变量类型等

简介:

grep:支持基本正则表达式,使用?、{}、()等元字符必须使用\转义

egrep:支持扩展正则表达式,多支持+、|等元字符,且无需转义

fgrep:fast grep,不支持正则表达式,效率最高,消耗资源最少。


shell的编程特性:脚本编程

先看看编程语言的分类:

    按语言等级层次分:

          机器语言-->汇编语言-->高级语言

    按语言特性分类:

            编译型(静态)语言:执行前必须先编译成可执行格式,执行时无需其他条件

                                 强类型(变量):变量在使用前必须先声明,甚至还需初始化

                                c、c++、c#、java ...

            解释型(动态)语言:边解释边执行,要想执行,系统中必须包含对应的解释器

                                 弱类型:变量用时声明,甚至不区分类型

                                php、python、perl、shell ...

    按工作特性分类:

        面向过程语言:c、shell、perl

        面向对象语言:java、python、c++、perl


变量:一段公用的内存空间

内存:编址的存储单元

进程:执行中的程序

变量类型:事先确定数据的存储格式和长度

    字符型:

    数值:

        整形

        浮点型:11.23  1.123*10^1  0.123*10^2

    时间:

    2015.12.30:64bit

    99999:24bit


linux默认把数据存储为字符格式,以下命令不会得到想要的结果

[root@logstach tmp]# echo  2+3

2+3

可以这样:(注意2+3之间要空格)

[root@logstach tmp]# expr 2 + 3

5


问题:为什么要定义变量类型?

    假设我们存储10这个代码,如果我们把它存储成字符类型,那么理论上7个二进制位可以完全表示ascll码,存储10则需要14位,但是由于计算机最小单位是字节,所以最终占用16位。而如果存储为数字格式的话,10转化为二进制为1010,也就是只要4位最终占用1个字节就可以了。如果不加以区分,会早造成大量的空间浪费。  


缓冲区溢出攻击:

    假设我们定义一个变量的存储长度为8bit,当存储数值为256时,此时数值超过了8bit能表示的数值,于是向前进1,这个1就是溢出的位,如果溢出的位影响到的地址空间恰好是某个关键性进程的内存空间,所造成的后果是难以想象的。


逻辑运算:与、或、非、异或


变量赋值:VAL_NAME=VALUE


bash变量:

    本地变量:VALNAME=VALUE 作用域为整个bash进程

    局部变量:local VALNAME=VALUE  作用域为当前代码段

    环境变量:export VALNAME=VALUE 或VALNAME=VALUE ; export VALNAME

              作用域为当前shell进程以及子进程

    特殊变量:$?上一个命令的执行状态返回值

    位置变量:$1、$2、....    


脚本在执行时会启动一个子shell进程

    命令行中启动的脚本会继承当前shell的环境变量

    非命令行(系统自动执行的脚本)需要自我定义各环境变量;


程序执行时,可能有两类返回值:

    程序执行结果

    程序状态返回代码(0-255)

        0:正确执行

        1-255:错误执行,1,2,127系统预留


/dev/null:软件设备,bit bucket,数据黑洞,任何输出指向给它都不再屏幕上显示也不存储

        

引用变量:${VALNAME} {}有时可以省略

不可以省略的情况:

[root@logstach ~]# name=you

[root@logstach ~]# echo "i am $namer lover"

i am  lover

[root@logstach ~]# echo "i am ${name}r lover"

i am your lover


撤销变量:

unset  VARNAME


查看当前shell中变量:

set

查看当前shell中的环境变量:

printenv

env

export


脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序


shebang:魔数

#!/bin/bash

    linux只认为elf是可执行格式,魔数的作用就是告诉内核用什么解释器来解释执行这些ascll代码,如果perl脚本就用#!/bin/perl,python脚本就用#!/bin/python


练习:写一个脚本,完成以下任务

1,添加5个用户,user1...user5

2.每个用户密码通用户名,而且要求添加密码不显示passwd返回的执行结果信息。

3.每个用户添加完成后,显示xxx添加成功字样。


练习:写一个脚本,完成以下任务

  1. 使用一个变量保存一个用户名

  2. 删除此变量中的用户,并删除其家目录

  3. 显示用户删除完成信息。












本文转自biao007h51CTO博客,原文链接:http://blog.51cto.com/linzb/1730424 ,如需转载请自行联系原作者



相关文章
|
6月前
|
Shell
在Bash中检查变量是否为空的几种方法
在Bash中检查变量是否为空的几种方法
493 0
在Bash中检查变量是否为空的几种方法
|
4月前
|
机器学习/深度学习 Unix Shell
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
71 0
|
6月前
|
监控 Shell Linux
使用Python和Bash编写内网监控工具:自动巡检脚本示例
为了确保内网的顺畅运行,自动化监控工具变得不可或缺。本文将介绍如何使用Python和Bash编写一个简单而强大的内网监控工具,它可以帮助您自动巡检网络和系统状态,及时发现问题并采取措施。
245 0
|
8月前
|
Shell
使用Bash备份脚本
使用Bash备份脚本
54 1
|
10月前
|
Shell
【Shell编程】Shell中Bash变量-数值运算、运算符变量、测试和内容替换
【Shell编程】Shell中Bash变量-数值运算、运算符变量、测试和内容替换
56 0
|
10月前
|
Shell
【Shell编程】Shell中Bash变量-预定义变量
【Shell编程】Shell中Bash变量-预定义变量
73 0
|
10月前
|
Shell
【Shell编程】Shell中Bash变量-环境变量
【Shell编程】Shell中Bash变量-环境变量
57 0
|
10月前
|
机器学习/深度学习 Shell
【Shell编程】Shell中Bash变量-位置参数变量
【Shell编程】Shell中Bash变量-位置参数变量
55 0
|
10月前
|
Shell
【Shell编程】Shell中Bash变量-用户自定义变量
【Shell编程】Shell中Bash变量-用户自定义变量
49 0
|
10月前
|
运维 Shell
善用chatGPT学习 | bash脚本如何判断字符串在数组中
善用chatGPT学习 | bash脚本如何判断字符串在数组中
147 0