SHELL编程规范与变量
shell相比标准开发语言比如JAVA,C,C++来说还是比较简单的,其实就是一堆命令的集合而已,初学者从简单的shell脚本学起,至于shell编程还是要有编程思想在里面,因此,循序渐进很重要,先研究格式语法,再研究编程,今天就列举一些shell里的概念,以便我们理解shell编程。
1、脚本声明
在写body之前要对shell脚本进行声明,告诉操作系统,这是一个shell文件,不声明的话系统默认为用bash来执行脚本。格式如下
#!/bin/bash(这里的bash可以换成sh、dash、tcsh、csh等)
2、脚本注释
注释格式和一般的编程语言类似,为:#+内容
3、脚本文件名称规范
我们可以用.sh结尾,这是比较规范的写法,但是注意,其实linux里这个.sh不作为识别文件类型的参照,仅仅是用来标记这是一个脚本文件而已,方便我们维护。
4、脚本执行方式
source [文件名]
. [文件名]
./ [文件名] (注意这种方式文件需要有执行权限)
bash/dash/sh [文件名]
5、管道符号
管道符号的意思是把上一条命令的执行结果作为下一条命令的参数
例如:cat /etc/passwd | grep "bash" | wc -l (统计下passwd文件下有"bash"的记录有多少行)
6、重定向
<0 /dev/stdin 标准输入
1> /dev/stdout 标准输出 >> 追加而不是覆盖
2> /dev/stderr 标准错误输出 2>> 追加而不是覆盖
&> 混合输出 &>> 追加而不是覆盖
注意:符号里的 0、1、2数字可以省略
例:
ls > file (意思是把ls查询出来的内容放入file文件里,而不是显示在屏幕上)
ls &> /dev/null (把结果放入黑洞设备,不显示出来)
例:
cat test.txt 和 cat < test.txt 文件是一个意思
7、自定义变量
由用户自己定义、修改和使用,变量名以字母或下划线开头、区分大小写
例1:
name=Tom
echo $name
Tom
例2:
name='zhang san'
echo $name
zhang san
例3:
name=bb
Name="$nameLY"
echo Name
bbLY
例4:
Name='$nameLY'
echo Name
$nameLY
例5:
TIME=`data`
echo $TIME
2016年10月25日星期五 12:32:55 CST
例6:
TIME=$(data)
echo $TIME
2016年10月25日星期五 12:32:55 CST
例7:交互定义变量
输入:read -p "please input your name:"NAME
交互:please input your name:zhangsan
输入:echo $NAME
输出:zhangsan
例子总结:""识别里面的变量、''把里面当一个字符串、``把里面的命令执行结果定义
8、预定义变量
由bash预先定义好的一类特殊变量,用户只能用不能改。
~] #cat mybak.sh
#!/bin/bash
tar zcf $* $>/dev/null
echo "已执行$0脚本"
echo "共完成$#个对象的备份"
echo"具体的内容包括:$*"
~] #./mybak.sh /etc/passwd /etc/shadow
已执行./mybak.sh脚本
共完成2个对象的备份
具体的内容包括:/etc/passwd /etc/shadow
解析:$*或$@保存脚本要处理的参数、$0保存脚本名称、$#保存了脚本要处理的参数个数、$?保存着命令或脚本的运行状态码
9、位置变量
$n(n为1-9)就是位置变量
~] #vi test.sh
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
~] #source test.sh zhangsan cloud yes
./test.sh
zhangsan
cloud
yes
注:$0是预定义变量,保存脚本名称
10、环境变量
使用env命令可以查看当前工作环境下的环境变量,PATH变量用于设置可执行程序的默认搜索路径,环境变量的全局配置为/etc/profile每个用户还有自己独立的配置文件 ~/.bash_profile。把路径可执行文件的路径写到PATH变量中,就可以直接用路径里的可执行文件。
例如:apachectl start
方法1:PATH=$PATH:/root (临时生效,/root为可执行文件的存放路径,这句话意思是把/root这个目录添加到PATH变量里,是临时写入内存的)
方法2:echo "PATH=$PATH:/root" >> /etc/profile (永久生效)
11、变量的作用范围
默认情况下新定义的变量只在当前shell环境中有效,因此称为局部变量,当进入子程序或者新的shell环境时,局部变量将无法再次使用,为了解决这个问题,可以用export指定为全局变量。
格式1:export 变量名
格式2:export 变量名=变量值
例:
~] #NAME=zhangsan
~] #echo $NAME
zhangsan
~] #bash
~] #echo $NAME
"输出为空"(因为切换shell环境了,而且变量没有指定为全局变量)
12、运算
例:
~] #A=11
~] #B=22
~] #C=$A+$B
~] #echo $C
11+22
注:shell中输出的值,linux默认为字符串。
那个为了使运算得以进行,可以这样:
expr [变量] [运算符] [变量2]
+加法 -减法 \*乘法(\是转意符,把*转意为乘) /除法 %求模、取余
例:
~] #x=35
~] #y=16
~] #c=`expr $x + $y` (注:+ 左侧和右侧必须有空格)
~] #echo $c
51
SHELL编程规范与变量的更多相关文章
- 01 shell编程规范与变量
前言: 大家对shell脚本应该都不算陌生了,如果突然问你什么是shell脚本?是干什么用的?由什么组成以及怎么使用?变量的概念是什么?作用范围是什么?变量间的算术运算怎么表示?你能很容易答出来吗 本 ...
- Shell脚本之编程规范和变量
Shell脚本编程规划和变量 1.Shell脚本概述 2.Shell编程规划 3.重定向与管道 4.Shell脚本变量 1.Shell脚本概述 Shell的作用:充当"翻译官"的角 ...
- Linux学习——shell编程之环境变量配置文件
小白学习,在学习中总结! shell编程之环境变量配置文件 一:环境变量配置文件 1 shell编程之环境变量配置 变量类型: 用户自定义变量(本地变量) 环境变量 :定义每个用户的操作环境,如pat ...
- shell编程下 特殊变量、test / [ ]判断、循环、脚本排错
第1章 shell中的特殊变量 1.1 $# $# 表示参数的个数 1.1.1 [示例]脚本内容 [root@znix ~]# cat /server/scripts/show2.sh #!/bin/ ...
- 【转】shell编程下 特殊变量、test / [ ]判断、循环、脚本排错
[转]shell编程下 特殊变量.test / [ ]判断.循环.脚本排错 第1章 shell中的特殊变量 1.1 $# $# 表示参数的个数 1.1.1 [示例]脚本内容 [root@znix ~] ...
- Shell 编程基础之变量和环境变量
一.变量赋值和引用 Shell 编程中,使用变量无需事先声明,同时变量的命名不惜遵循如下规则: 首个字符必须为字母(a-z,A-Z)或者_ 变量名中间不能有空格,可以使用_连接 不能使用其他表达符号 ...
- shell编程之环境变量
在shell编程里我们首先接触到的是环境变量,常用命令说明 1. 使用echo命令查看单个环境变量.例如: echo $PATH 2. 使用env查看所有环境变量.例如: env 3. 使用set查看 ...
- shell编程规范:引用
Shell代码规范 作 者: 毕小朋 用 途: 规范Shell代码书写,方便查看与修改 博 客: http://blog.csdn.net/wirelessqa 参 考: http://www.ohl ...
- linux学习(七)Shell编程中的变量
目录 shell编程的建立 shell的hello world! Shell的环境变量 使用和设置环境变量 Shell的系统变量 用户自定义变量 @(Shell编程) shell编程的建立 [root ...
随机推荐
- python----python使用mysql
Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymql pymsql是Python中操作MySQL的模块,在windows中的安装: pip ...
- requirejs——基础
一.requirejs存在的意义: 我们引用外部JS文件通常是这样引用的: <script src="1.js"></script> <script ...
- js中slice,splice和split方法的区别
1.slice(数组) 用法:array.slice(start,end) 解释:该方法是对数组进行部分截取,并返回一个数组副本:参数start是截取的开始数组索引,end参数等于你要取的最后一个字符 ...
- request.getHeader("x-forwarded-for")这是什么意思
request.getHeader,简单的说就是获取请求的头部信息,根据http协议,它能获取到用户访问链接的信息,以下是我们常用的: request.getHeader("referer& ...
- Java多线程-线程的同步(同步方法)
线程的同步是保证多线程安全访问竞争资源的一种手段.线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些 ...
- 【bzoj1787】[Ahoi2008]Meet 紧急集合
1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2466 Solved: 1117[Submit] ...
- PHP Liunx 服务安全防范方案
PHP100平均每个月都会有入侵或者攻击,我们做了很多工作,当然很多高手们还是可以入侵,这我们并不感到奇怪,因为我们相信天外有天,人外有人,虽然 我们现在服务器还是稳定(高手们不要来喷了),我们把我们 ...
- c语言实战 BJT时间转化位UTC时间
题目是这样的: 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果小时小 ...
- sed陷阱
sed陷阱: sed -i 后不要紧跟字母, 否则会产生一个新的备份文件(在原文件后多出来一个字母) // 正确写法 /usr/bin/sed -i "/PREFIX=/d" ...
- fDDA
fDDA:fast DDA,快速的动态数据认证 中国余数定理模式: 就是中国的古人发明的多项式除以多项式的结果的一个定理 AC:应用密文,application cryptogram(密文) gene ...