shell 之基本的运算指令

来源:互联网 发布:织梦 频道 编辑:程序博客网 时间:2024/05/19 18:39

做运行测试时,最好要是用  chmod +x 让程序运行, 如果是用 sh  XX的方式的话,是不支持let 之类的指令,运行会出错

加法的三种表达式

#!/bin/bash

n=8
 n=`expr $n + 1 `
echo  "n=$n"
a=9
let a=a+1
echo "a=$a"

注意,let 时变量前面不要加$



b=11
b=$(($b + 1))

echo "b=$b"

http://blog.sina.com.cn/s/blog_4b9eab320100rc1t.html

let与(()) 在shell编程中是可以互换的;它们在循环语句中控制变量变化非常有用;

使用let语句或者(())我们可以像C语言那样写程序~ 对于变量赋值,判断什么的不用繁琐的$VAR,
-eq等等, C语言中怎么用这里就怎么用,很方便
注:(())算数表达式的值在if和while判断时不用在前面加“$”;在echo输出值时需要加"$"
以下引自http://unix-cd.com/unixcd12/article_2740.html

2.使用let来进行算术计算

语法

let expression or (( expression))

例子:

$ x=10          $x=12

$ y=2           $ let "x<10"   

$ let x=x+2        $ echo$?

$ echo $x         1

12            $ (( x> 10 ))

$ let "x = x / (y+1)"   $ echo$?

$ echo $x         $0

4             $ if ((x> 10 ))

$ (( x = x + 1 ))    >  then echo x greater

$ echo $x        >  else echo x not greater

5             fi

             xgreater

循环语句通常使用一个增长的数字变量来进行控制。使用let命令,可以在shell脚本中使用算术表达式。这个命令允许使用长的整数运算。在上例中,expression代表一个shell变量的算术表达式和能够被shell识别的操作符,而((  ))可以替let命令。shell能够识别的表达式如下所示:

操作符     描述

-        减去

!        逻辑相反

* /%      乘,除,余数

+ -       加,减

<= >= < > 关系比较

==!=      等于不等于

=        赋值

括号能够被用作改变表达式中计算的顺序,就像在

let "x=x/(y+1)"

中一样

注意双引号被用来忽略括号的特殊含义。同样如果你希望使用空格来分隔操作符和操作符的时候,就必须使用双引号,或者(( ))语句:

let " x = x + (y /2)" 或者((x= x+ (y / 2) ))

当使用逻辑和关系操作符,(!,<=,>=,<,>,++,~=),的时候,shell会返回一个代码变量,?会反映结果是真还是假,再一次说明,必须使用双引号来防止shell将大于和小于运算符当作I/O重定向

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 表示正常


0 0
原创粉丝点击