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编程规范与变量的更多相关文章

  1. 01 shell编程规范与变量

    前言: 大家对shell脚本应该都不算陌生了,如果突然问你什么是shell脚本?是干什么用的?由什么组成以及怎么使用?变量的概念是什么?作用范围是什么?变量间的算术运算怎么表示?你能很容易答出来吗 本 ...

  2. Shell脚本之编程规范和变量

    Shell脚本编程规划和变量 1.Shell脚本概述 2.Shell编程规划 3.重定向与管道 4.Shell脚本变量 1.Shell脚本概述 Shell的作用:充当"翻译官"的角 ...

  3. Linux学习——shell编程之环境变量配置文件

    小白学习,在学习中总结! shell编程之环境变量配置文件 一:环境变量配置文件 1 shell编程之环境变量配置 变量类型: 用户自定义变量(本地变量) 环境变量 :定义每个用户的操作环境,如pat ...

  4. shell编程下 特殊变量、test / [ ]判断、循环、脚本排错

    第1章 shell中的特殊变量 1.1 $# $# 表示参数的个数 1.1.1 [示例]脚本内容 [root@znix ~]# cat /server/scripts/show2.sh #!/bin/ ...

  5. 【转】shell编程下 特殊变量、test / [ ]判断、循环、脚本排错

    [转]shell编程下 特殊变量.test / [ ]判断.循环.脚本排错 第1章 shell中的特殊变量 1.1 $# $# 表示参数的个数 1.1.1 [示例]脚本内容 [root@znix ~] ...

  6. Shell 编程基础之变量和环境变量

    一.变量赋值和引用 Shell 编程中,使用变量无需事先声明,同时变量的命名不惜遵循如下规则: 首个字符必须为字母(a-z,A-Z)或者_ 变量名中间不能有空格,可以使用_连接 不能使用其他表达符号 ...

  7. shell编程之环境变量

    在shell编程里我们首先接触到的是环境变量,常用命令说明 1. 使用echo命令查看单个环境变量.例如: echo $PATH 2. 使用env查看所有环境变量.例如: env 3. 使用set查看 ...

  8. shell编程规范:引用

    Shell代码规范 作 者: 毕小朋 用 途: 规范Shell代码书写,方便查看与修改 博 客: http://blog.csdn.net/wirelessqa 参 考: http://www.ohl ...

  9. linux学习(七)Shell编程中的变量

    目录 shell编程的建立 shell的hello world! Shell的环境变量 使用和设置环境变量 Shell的系统变量 用户自定义变量 @(Shell编程) shell编程的建立 [root ...

随机推荐

  1. leetcode766

    本题经过一下午的思考,终于解出来了.使用的是层次遍历的思想. class Solution { public: bool isToeplitzMatrix(vector<vector<in ...

  2. ado connection string

    Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=mydb;Data Sou ...

  3. Codeforces 1120D (树形DP 或 最小生成树)

    题意看这篇博客:https://blog.csdn.net/dreaming__ldx/article/details/88418543 思路看这篇:https://blog.csdn.net/cor ...

  4. 阿里云ECS购买优惠码

    今天收到了阿里云给我发的邮件,大意是阿里云推荐码限量开放,可享九折优惠! 于是就点击进去申请了一下 申请的优惠码是:C7IYIS有效期至2015-11-30 23:59:59 首次购买包年包月云服务器 ...

  5. PHP开发札记-星期/周操作中常用的日期获取方法

    本周一echo date('Y-m-d',(time()-((date('w')==0?7:date('w'))-1)*24*3600)); //w为星期几的数字形式,这里0为周日 本周日 echo ...

  6. 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息

    0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...

  7. 496. Next Greater Element I 另一个数组中对应的更大元素

    [抄题]: You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subse ...

  8. struts2 框架的基本使用

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  9. Python程序调试-TabError: inconsistent use of tabs and spaces in indentation

    报错信息:TabError: inconsistent use of tabs and spaces in indentation 说明:代码缩进统一使用Tab键或空格键,不能混用. 解决办法: 1. ...

  10. linux删除文件后磁盘空间未释放的问题

    很可能是该文件还被其它进程使用. 使用: lsof | grep deleted | grep $FILE_NAME 可以看到正使用该文件的进程,将之kill即可.也可以查看进程来验证: ls -l ...