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 ,如需转载请自行联系原作者



相关文章
|
2月前
|
监控 安全 Shell
防止员工泄密的措施:在Linux环境下使用Bash脚本实现日志监控
在Linux环境下,为防止员工泄密,本文提出使用Bash脚本进行日志监控。脚本会定期检查系统日志文件,搜索敏感关键词(如"password"、"confidential"、"secret"),并将匹配项记录到临时日志文件。当检测到可疑活动时,脚本通过curl自动将数据POST到公司内部网站进行分析处理,增强信息安全防护。
150 0
|
2月前
|
存储 Shell Linux
Linux Bash 脚本中的 IFS 是什么?
【4月更文挑战第25天】
60 0
Linux Bash 脚本中的 IFS 是什么?
|
29天前
|
Unix Shell Linux
技术经验分享:Bash脚本命令使用详解
技术经验分享:Bash脚本命令使用详解
15 0
|
2月前
|
存储 弹性计算 运维
用bash脚本创建目录
【4月更文挑战第29天】
25 3
|
2月前
|
Shell
shell 命令(一)概述【别名、 bash重定向 、定义变量】
shell 命令(一)概述【别名、 bash重定向 、定义变量】
35 0
|
2月前
|
存储 Unix Shell
【简化Cmake编译过程 】编写通用的bash脚本:简化和构建cmake高效自动化任务
【简化Cmake编译过程 】编写通用的bash脚本:简化和构建cmake高效自动化任务
114 0
|
2月前
|
机器学习/深度学习 Unix Shell
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
90 0
|
9月前
|
监控 Shell Linux
使用Python和Bash编写内网监控工具:自动巡检脚本示例
为了确保内网的顺畅运行,自动化监控工具变得不可或缺。本文将介绍如何使用Python和Bash编写一个简单而强大的内网监控工具,它可以帮助您自动巡检网络和系统状态,及时发现问题并采取措施。
288 0
|
存储 Shell 测试技术
开始你的bash/shell脚本编程
原文链接 I love bash 对于我自己来说,学习新框架或技术的最佳方式是同时获得实践经验,在本文中,你将自己通过编写代码来学习shell脚本的基础知识!本文包含语法,shell脚本的基础知识到中级shell编程,通过这篇文章你可以学习shell的相关知识,并且通过shell来实现Unix/Linux之间的接口 1_qo-oir60xdhic3wjqpu64g 介绍 您可能已经多次遇到过“脚本”这个词,但脚本的的含义是什么意思呢?简单的来说,脚本是包含一系列要执行的命令。
1247 0
|
Shell 数据安全/隐私保护 C++
bash脚本编程
编程语言: 编译器,解释器 编程语言:机器语言,汇编语言、高级语言 静态语言:编译型语言 强类型(变量) 关键字: 事先转换成可执行格式 c,c++,JAVA,C# 动态语言:解释型语言 on the fly 弱类型 边解释变执行 p...
1059 0