Shell脚本进阶一

随着课程的进度,对shell脚本进行进行全面的总结

之前一直没有系统的学习过编程,这次在马哥培训,希望花更多的时间和精力在Shell脚本上,总体计划是根据Shell学习的进度不段的更新,把更多的总结和学习进阶体会和进步分享给大家,也对自已是一个鞭策。

脚本,英文script,原意是剧本,在shell中,本质上就是各种Linux命令的堆砌,按实际的需求,结合命令控制流程和条件判断,本质上,脚本可以提高工作效率,按照王老师所说,在Linux里命令操作,最大可接受的重复次数是2次,超过2次都应该考虑用脚本来代替手工的重复性工作。Shell脚本的主要用途有

  1. 自动化常用命令
  2. 执行系统管理和故障排除
  3. 创建简单的应用程序
  4. 处理文本或文件

在进一步学习脚本之前,我们必须对变量这一概念有明确的了解。变量即命名的内存空间,变量类型确定了数据的存储格式和长度,主要分为字符,数值,日期,布尔等,shell默认变量类型为字符类型,除非作事先的申明,如给变量A赋值10就是字符类型

[root@CentOS6 script]# A=10

[root@CentOS6 script]# echo $A

10

如果要明确变量是整数10,就必须declare -i B=10。

一、变量类型

变量的类型决定了存储空间的不同,如同样是上述的字符串变量A和整数B的值都是10,字符10要占用2byte,因为在ASCCI中,每个字符占1byte即8bit,而对于变量B来说,十进制数字10转换为进进制是1010,只需要4bit,但是计算机中最小存储单元是1byte,所以变量B占用2byte的空间。

日期型的变量占用存储空间的差别会更大,如果用ASCII来存储日期2013/12/31,不包括分隔符/,需要8byte存储空间。计算机存储日期是计算从1970/1/1到指定日期的天数,这样2^24足够存储这样的天数,即存储天数只占用3byte空间。

布尔变量可以实现逻辑运算,包括,与、或、异或三种,数值逻辑和电逻辑具有相同之处,如与运算类似电路的串联,或运算类似电路的并联,数值逻辑异或相同为假,不同为真,电转换为磁之后的同极排斥,异极吸引。

二、Bash变量类型

主要分为本地变量,局部变量,环境变量,特殊变量,位置变量。

1. 本地变量

顾名思义,作用域为整个bash进程,赋值语句VARNAME=VALUE

2. 局部变量

作用域为当前代码段,赋值语句local VARNAME=VALUE

3. 环境变量

作用域为当前shell进程及子进程,赋值语句export VARNAME=VALUE。脚本在执行时会启动子shell进程,命令行中启动的脚本会继承当前shell的环境变量。注意:系统自动执行的脚本(非命令行启动)需要自我定义需要的各环境变量

4. 特殊变量

$?变量表示命令执行的状态结果0表示正确执行,1-255表示错误执行,其中1,2,127为系统预留的错误执行状态结果。

$0表示位置变量中的脚本本身

$*传递给脚本的所有参数,全部参数合为一个字符串(需要结合双引号””)

$@传递给脚本的所有参数,每个参数为独立字符串(需要结合双引号””)

$#表示脚本参数个数

$$表示当前运行bash的进程PID

 

5. 位置变量

$1,$2,$……表示在脚本代码中调用通过命令行传递给它的参数

 

三、变量赋值、查看及撤销

1. 变量赋值

普通变量赋值用=,如VARNAME=VALUE

环境变量赋值:export VARNAME=VALUE 或declare -x VARNAME=VALUE

一个变量赋多个值:ANIMALS=pig;animals=$ANIMALS:goat

环境变量赋多个值:export PATH=/usr/local/mysql:$PATH

2. 变量引用

$name ${name}

3. 显示变量

显示普通变量echo $VARNAME

显示所有环境变量:evn,printenv,export, declare -x

4. 删除变量

unset VARNAME

注意:但凡操作变量本身而不是变量的值就不需要加$

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96904

(0)
Evan LiangEvan Liang
上一篇 2018-04-23 08:32
下一篇 2018-04-23 08:51

相关推荐

  • 正则表达式

    正则表达式REGEXP 有一类特殊符号表是控制伙同裴的功能程序支持:grep,seb,。。。基本正则表达式:BRE扩展正则表达式;ere采用不同算法经检查处理正则表达式的软件模块PCRE元字符:字符匹配,匹配次数,位置锚定,分组 man7详细文档 字符匹配.表示任意的单一字符 放在[]里表示.本身不需要转义\.转义(回归字符本身的含义)表示.本身[]表示字符…

    Linux笔记 2018-04-08
  • 计算机原理与Linux基础

    计算机的组成及功能 1、其实计算机的组织分为内部设备和外部设备, 内部设备:         CPU:运算器、寄存器、缓存         存储器:内存,RAM(Random Access Memory)         控制器:控制器是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。 外部…

    Linux笔记 2018-05-13
  • Linux发行版的基础目录名称命名法则及功用规定

    对于linux来说,普天之下莫非王土,所有的文件必须从根开始。磁盘有多个分区,如何跟根建立关系?我们把磁盘上一个分区定义为根分区,那么其它分区被根分区奴役。其它分区挂载(关联)到根分区上。 所有linux命名必须遵守,FHS,:Filesystem Hieracchy standard.文件系统层级机构标准。定义根下必须有哪些目录,哪些可以没有,不同发行版所…

    2018-06-27
  • 第六周博客作业

    一、简述osi七层模型和TCP/IP五层模型
    二、简述iproute家族命令
    三、详细说明进行管理工具htop、vmstat等相关命令,并举例
    四、使用until和while

    2018-04-20
  • MYSQL数据库笔记(一)

    二进制格式安装7.4 1、检查环境 2、下载对应的二进制包 3、 useradd -r -d /data/mysqldb -s /sbin/nologin mysql 创建账号 getent passwd mysql 确认 创建软连接; chown -R root: mysql/ 创建物理卷; 创建逻辑卷;   创建文件系统; mkdir /dat…

    2018-06-07
  • 软raid5制作

     一、准备工作 (1)VMware虚拟机 (2)centos6.9系统 二、在centos6.9关机状态下增加3块硬盘做RAID5,其中一块当校验盘。 三、用远程终端可以清楚的显示新增加的硬盘,将新增加的硬盘进行分区   四、开始制作 mdadm -C /dev/md0 -a yes -l 5 -c 32 -n 2 -x1 /dev/sd{b1,c…

    2018-04-29