转自:http://blog.chinaunix.net/uid-26827001-id-3154024.html

首先看到好多以这样开头的    #!/bin/bash   这个是告诉系统 解释此脚本文件的Shell程序

# 这个是注释行,当行有效

脚本程序一般用 xx.sh 文件表示,这样一样就可以看出文件的属性,当然也可以不这样

一个脚本程序写完后,如果要执行它,则必须先赋+x  执行权限给它 

例如:chmod +x xx.sh,然后用命令 ./filename  执行

 以下是一些知识点:

1. echo :用于显示(不带参数,如果有多行则换行输出)   例如:echo  "hello shell"  

    如果加上参数 -n  表示如果有多行的话,将不换行输出

    点击(此处)折叠或打开

  1. #!/bin/bash
  2. # filename is while.sh
  3. count=0
  4. while(($count < 5 ))
  5. do
  6. echo -n " count=" $count
  7. let count=count+1
  8. done

顺便说一句,linux提供2中命令:一种是内部命令,一种是外部命令。解释执行内部命令要比外面命令快的   多, 同时,解释内部命令时候,shell不需要创建子进程,而外部命令则需要创建子进程,这就增大了系统的开销。查看是不是内部命令,可以用如下命令:type  command  
例如:type echo

2. $xx  表示引用变量:如上面的代码中,第三行定义了变量count,
第四行,第六行 $count  则引用该变量。

3. 位置变量 
: $0 文件名,$1 第一个参数 $2 第二个参数

点击(此处)折叠或打开

  1. #!/bin/bash
  2. #filename is first.sh
  3. #have 3 parameter to first.sh
  4. #command is: ./first.sh 1 2 3
  5. # $#:传入脚本的参数个数
  6. # $*:显示所以的参数,并以空格隔开
  7. # $0:命令本身,即要执行的文件名
  8. # $1:第一个参数
  9. # $2:第二个参数
  10. # $3:第三个参数 后面一样 ~等等
  11. echo "number of vars:"$#
  12. echo "var of vars:"$0
  13. echo "first var:"$1
  14. echo "second var:$2
  15. echo "third var:$3

4. let :用来执行算数运算和数值表达式测试。

    let 命令的替代表示形式是: ((算术表达式)) ,这样做的好处是如果表达式中含有特殊的字符,可以告示shell 进行特殊处理:例如,let ″val=a|b″。如果不括起来,Shell会把命令行let val=a|b中的“|”看成管道符,将其左右两边看成不同的命令,因而无法正确执行。

    以下代码执行结果为:1 3 7 10

点击(此处)折叠或打开

  1. #!/bin/bash
  2. #filename is let.sh
  3. i=1
  4. echo "i="$i
  5. let i=i+2
  6. echo "i="$i
  7. let "i=i+4"
  8. echo "i="$i
  9. ((i+=3))
  10. echo "i="$i

5. 函数调用:声明函数
function name(){~~~~},函数的调用,直接写函数名称name即可。

点击(此处)折叠或打开

  1. #!/bin/bash
  2. # filename is second.sh
  3. # 函数申明和调用
  4. function fun1(){
  5. local a="hello world"
  6. echo "函数调用成功 "$a
  7. }
  8. echo "函数调用前"
  9. fun1
  10. echo "函数调用结束"

6. Shell中的变量种类:局部变量和全局变量

        局部变量 是在函数中用local
声明的变量:他的作用域是在函数调用开始到函数结束。

        全局变量 在shell脚本下声明的变量,他的作用域是整个shell的生存周期内。shell结束,全局变量的周期也结束。

点击(此处)折叠或打开

  1. #!/bin/bash
  2. #filename is localvar.sh
  3. var1="hello shell"
  4. function fun(){
  5. #定义局部变量
  6. local var2="hello local variable"
  7. echo "在函数中 使用局部变量 var2="$var2
  8. echo "调用全局变量1  var1="$var1
  9. }
  10. fun
  11. echo "在函数外调用 局部变量 var2="$var2
  12. echo "调用全局变量2  var1="$var1

补充:环境变量、位置变量、标准变量、特殊变量等

    环境变量:用于所有的用户进程,可以看成是windows下的环境变量,用export定义:如

              export LOGNAME="fjsm20", 可以用env或export查看系统环境变量

    位置变量:就是调用函数时候的参数,例如:./first.sh 11 22 33 如上面的第3知识点

    标准变量:就是bash环境建立的一些标准环境的标量,他会自动去解析,基本都在/etc/profile中定义了有EXINIT,HOME,IFS,LOGNAME,MAIL,MAILCHECK等(引用网上资料)

     特殊变量:
$# 参数个数,$* 列出所有参数,$!显示后天脚本的进程Id ,$$显示当成脚本的进程id,$? 最后命令退出的状态,0 表示正常;

shell 脚本学习之一 ------let,echo,变量的更多相关文章

  1. shell脚本学习-变量

    跟着RUNOOB网站的教程学习的笔记 shell变量 shell变量的命名 定义变量时,变量名不加美元符号($,PHP语言中需要),如: name="runoob" 注意,变量名与 ...

  2. 【Shell脚本学习6】Shell变量:Shell变量的定义、删除变量、只读变量、变量类型

    Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编 ...

  3. 转 shell脚本学习指南

    shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...

  4. shell脚本学习总结02--数组

    bash同时支持普通数组个关联数组,普通数组只能使用整数作为数组的索引,关联数组可以使用字符串作为数组的索引. 数组的定义方法: 在单行中使用一列值定义一个数组 [root@new ~]# array ...

  5. Shell脚本学习指南笔记

    Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...

  6. shell脚本学习之6小时搞定(1)

    shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...

  7. shell脚本学习(一)

    1.hbg@HWM:/$ su root密码:root@HWM:/# $表示普通用户, #表示管理员用户root.root是linux系统中权限最高的用户. 2.在bash中,每个变量的值都是字符串. ...

  8. shell脚本实现监控shell脚本的执行流程及变量的值

    这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...

  9. 【shell脚本学习-3】

    part-1 #!/bin/bash:<<FTP#test [ 1 -eq 2] #条件测试x="abc" #不允许有空格y="abc" [ &qu ...

随机推荐

  1. http协议详解-经典篇

    本文转载至 http://www.cnblogs.com/flychen/archive/2012/11/28/2792206.html   ————————————————————————————— ...

  2. JS基础常识理解

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. maven scope runtime

    https://blog.csdn.net/ningbohezhijunbl/article/details/25818069 There are 6 scopes available: compil ...

  4. 【BZOJ3721】PA2014 Final Bazarek 贪心

    [BZOJ3721]PA2014 Final Bazarek Description 有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n ...

  5. 【BZOJ4861】[Beijing2017]魔法咒语 矩阵乘法+AC自动机+DP

    [BZOJ4861][Beijing2017]魔法咒语 题意:别看BZ的题面了,去看LOJ的题面吧~ 题解:显然,数据范围明显的分成了两部分:一个是L很小,每个基本词汇长度未知:一个是L很大,每个基本 ...

  6. Vue中表单校验

    1.安装校验插件vee-validate npm install vee-validate --save 2.在main.js中引用插件 // 表单校验 import VeeValidate, { V ...

  7. python数据分析之:绘图和可视化

    在数据分析领域,最出名的绘图工具就是matlib.在Python同样有类似的功能.就是matplotlib.前面几章我们都在介绍数据的生成,整理,存储.那么这一章将介绍如果图形化的呈现这些数据.来看下 ...

  8. 用JavaScript判断一个对象是否数组?

    Q:如何判断一个对象是否为数组? A1:判断对象的constructor是否指向Array, 接着判断对应的特殊属性,如length,splice之类.这个很容易冒充. A2:使用instanceof ...

  9. imagick图片压缩。

    选择一个合适的图片处理扩展包. 常见的扩展如GD,imagick,Gmagick. 老古董的GD丢掉吧,效率很低,而且压缩的图片体积很大=.=   imagick是个不错的选择,在PHP的图片处理扩展 ...

  10. Python正则表达式Cheat sheet

    1.来源: Python Regular Expressions Cheat Sheet 2.内容: Special Characters ^ | Matches the expression to ...