shell编程规范与变量详解
目录
- shell脚本概述
- shell作用
- 编写第一个shell脚本
- 重定向与管道操作
- 重定向操作
- 重定向输出
- 重定向输入
- 错误重定向
- 管道操作
- shell变量作用,类型
- 自定义变量
- 定义新变量
- 查看引用变量值
- 变量赋值特殊操作
- 设置变量作用范围
- 数值变量运算
- 特殊shell设置
- 环境变量
- 只读变量
- 位置变量
- 预定义变量
- 总结
shell脚本概述
shell可以批量处理,自动化完成一系列维护任务,避免大量重复性输入,交互操作等。
shell作用
shell是一个特殊的应用程序(在linux中),介于操作系统内核与用户之间,担任’命令解释器‘的角色,主要负责用户输入命令(解释),将需进行的操作传递给内核(输出结果)。
shell解释器有很多种,使用不同的shell时,其内部的指令,特殊符号会有区别。
编写第一个shell脚本
bash是目前使用最多(linux默认)的shell。shell脚本将要执行的命令放入一个脚本中,赋予其权限即可。
执行vim aaa.sh构建并编辑脚本
如要执行./aaa.sh需赋予权限。(bash ,source则无需)
执行脚本
重定向与管道操作
shell脚本具有批量处理的特性,大部分指令都是默认进行,因此提取,过滤执行信息非常重要。
重定向操作
linux系统使用文件来描述硬件设备等资源(硬板,分区等设备文件),用户提供操作系统处理的信息过程中,主要包括3类交互设备文件。
默认设备 | 文件编号 | ||
标准输入 | 键盘 | 0 | 命令将从标准输入文件中读取在执行过程中需要输入的数据。 |
标准输出 | 显示器 | 1 | 命令将执行后的输出结果发送到输出文件 |
标准错误 | 显示器 | 2 | 命令将执行时的各种错误信息发送到标准错误文件 |
重定向输出
是指将命令的正常输出结果保存到指定文件中(不显示在显示的屏幕上)(>/>>用于覆盖和追加文件)。
重定向输入
指将命令在接android收接受的途径由默认改成指定文件,不等待从键盘输入。
交互式操作过程可以通过重定向输入以读取文件的方式来完成。
执行
非交互式命令语句可以更方便的在Shell脚本中使用,从而大大减少程序被打断的过程,提高脚本执行的效率。
错误重定向
将执行命令时的错误信息保存到指定文件上而不是屏幕上。
管道操作
管道操作为不同命令之间提供了一种机制。位于|左侧命令作为输出结果,将右侧命令作为输入(处理对象),一行命令可以有多个|符。
shell变量作用,类型
shell变量用来存放系统和用户需要使用的特定参数,这些参数可以根据用户的设定或系统变化而相应变化,shell程序能够提供更加灵活功能,适应性更强。
自定义变量
自定义变量是由系统用户自己定义的变量,只在用户自己的Shell环境中有效,因此又称为本地变量。
定义新变量
bash中变量相对简单没有那么复杂,在定义一个新变量时,一般无需提前声明,直接指定变量名称给初始值即可(内容)。
查看引用变量值
在变量前加$可以引用一个变量值,使用echo查看变量,一条命令可以使用echo查看多个变量值。
当变量名称和紧跟其他的其他字符混淆时,使用{}将其隔开,否则将无法确定正确的变量名称。
变量赋值特殊操作
双引号(")
双引号起界定字符串的作用,特别是当赋值内容包括空格时,必须用"括起来,其他情况下"可以省略。
在"范围内使用$可以引用其他变量值(变量引用),从而能够直接调用现有变量的值给新的变量。
单引号(‘)
当赋值包括/$等特殊符号时,应用单引号括起来。在单引号范围内任何字符都将被当作普通字符看待,而且无法引用其他变量的值。
反撇号(`)
主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。`号内必须是可以执行的命令,不然将会出错。
使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以己使用"$()"来代替`号操作,以解决嵌套的问题。
read命令
bash内置命令android可以使用read来变量赋值。read命令用来提示用户输入信息,从而实现简单的交互过程。
[root@localhost~]# read ToDir1 /opt/backup/ [root@localhost ~]# echo $ToDir1 /opt/backup/
以便使交互式操作界面更加友好,提高易用性,read命令可以结合"-p'选项来设置提示信息,以便告知用户应该输入什么内容等相关事项。
[root@localhost~]#read-p"请指定备份存放目录:"ToDir22 请指定备份存放目录:/opt/backup [root@localhost ~]#_echo $ToDir2 /opt/backup
设置变量作用范围
默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子shell环境式,局部将无法再使用。
为了使用户定义的变量在所有android的子Shell环境中能够继续使用,减少重复设置工作,可以通过内部,命令export将指定的变量导出为全局变量。
使用export导出全局变量的同时,也可以为变量进行赋值,这样在新定义全局变量时就不需要提前进行赋值了。
数值变量运算
Shell变量的数值运算多用于脚本程序的过程控制。
- +加法运算。
- -:减法运算。
- \*:乘法运算,注意不能仅使用"*"符号,否则将被当成文文件通配符
- /:除法运算。
- %:求模运算,又称为取余运算,用来计算数值相除后的余数。
若要将运算结果赋值给其他变量,可以结合命令替换操作(使用反撇号)。
特殊shell设置
除了用户自行定义的Shell变量以外,在Linux系统和Bash Shell环境中还有一系列的特殊变量:环境变量,只读变量,位置变量,预定义变量。
环境变量
环境变量指的是出于运行需要而由Linux系统提前创建的一类变量,主要用于设置用户的工作环境,,包括用户宿主目录,命令查找路径,用户当前目录,登录终端等。
PATH变量用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序时,Linux系统
将在PATH变量指定的目录范围查找对应的可执行文件,如果找不到则会提示"command not found"
[root@localhost ~]# ls -lh /root/first.sh -rwxr-xr-x. 1 root root 27 Jul 4 09:24 /root/first.sh [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bi n:/root/bin [root@localhost ~]#first.sh -bash: first.sh: command not found [root@localhost ~]#_PATH="$PATH:/root" [root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/birh:/root/bin:/usr/local/mysql/bi n:/root/bin:/root [root@localhost~]#first.sh//直接以文件名运行脚本 当前的目录位于: /boot 其中以vml开头的文件包括:-rwxr-xr-x.1root5.2M Apr 12 13:20 vmlinuz-0-rescue-b15df1eb8205483f9f70c779709810abc -rwxr-xr-x. 1 root root 5.2M Nov 22 2016 vmlinuz-3.10.0-514.el7.x86_64
只读变量
Shell变量中有一种特殊情况,一经设定,其值是不可改变的,这种变量被称为只读变量。
位置变量
为了在使用Shell脚本程序时,方便通过命令行,为程序提供操作参数,Bjavascriptash引入了位置变量的概念。
执行vpythonim adder2num.sh
[root@localhost ~]# ./adder2num.sh 12 34 12 + 34=46 [root@localhost ~]# ./adder2num.sh 56 78 56 + 78 =134
预定义变量
预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量。
- $#:表示命令行中位置参数的个数。
- $*:表示所有位置参数的内容。
- $?:表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。
- $0:表示当前执行的脚本或程序的名称。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论