1、expr计算整数变量值

格式 :expr arg

例子:计算(2+3)×4的值

1、分步计算,即先计算2+3,再对其和乘4

s=`expr 2 + 3`
expr $s \* 4

2、一步完成计算:

expr  `expr 2 + 3 `  \* 4 
–说明:
运算符号和参数之间要有空格分开;
通配符号(*),在作为乘法运算符时要用\、“”、‘’符号修饰
–:expr 3 \* 2         expr 3 “*” 2       expr 3 ‘*’ 2 
 `(反引号)与键盘上的~同一个键上的符号
[fsy@localhost ~]$ s=`expr 2 + 3`
[fsy@localhost ~]$ echo $s
5
[fsy@localhost ~]$ expr $s \* 4
20
[fsy@localhost ~]$ expr `expr 2 + 3` \* 4
20
[fsy@localhost ~]$ expr 2 \* 3
6
[fsy@localhost ~]$ expr 2 "*" 3
6
[fsy@localhost ~]$ expr 2 '*' 3
6
[fsy@localhost ~]$ expr 2 * 3
expr: 语法错误
[fsy@localhost ~]$
2、let命令

–例子:计算(2+3)×4的值

[fsy@localhost ~]$ let s=(2+3)*4
[fsy@localhost ~]$ echo $s
20
[fsy@localhost ~]$

3、for语句——坑爹的开始...... 和其他语言的for不同!

对一组参数进行一个操作
语法格式:
 
for 变量 in 列表
do
命令行(通常用到循环变量)
done
说明:
–“列表”为存储了一系列值的列表,随着循环的进行,变量从列表中的第一个值依次取到最后一个值;
–do和done之间的命令通常为根据变量进行处理的一系列命令,这些命令每次循环都执行一次;
–如果“ in 列表”部分省略掉,Bash则认为是“in $@”,即执行该程序时通过命令行传给程序的所有参数的列表。

例1、自定义列表

#!/bin/bash
for var in one two three four five
do
echo ------
echo '$var is' $var
done

运行输出:

------
$var is one
------
$var is two
------
$var is three
------
$var is four
------
$var is five

例2、以命令返回值作为列表

#!/bin/bash
for var in `ls`
do
echo -----
echo $var
done

运行输出:

-----
abb
-----
abc
-----
a.out
-----
a.sh

例3、命令行参数指定为列表中的数值

#!/bin/bash

for var
do
echo "It's $var"
done

运行输出:

[fsy@localhost ~]$ sh c.sh a b c d
It's a
It's b
It's c
It's d

4、while语句

语法格式:
while      表达式 
do
命令行
done
说明:
–while循环中,只要条件为真,就执行do和done之间的循环命令;
–避免生成死循环。
例如:
#!/bin/bash
num=1
while [ $num -le 10 ]
do
echo -e "\t the num is $num"
let num=num+1
done

运行输出:

 the num is 1
the num is 2
the num is 3
the num is 4
the num is 5
the num is 6
the num is 7
the num is 8
the num is 9
the num is 10

5、until语句

语法格式:
unitil      表达式 
    do
命令行
    done
说明:
–until循环中,只要条件不为真,就执行do和done之间的循环命令,或者说,在until循环中,一直执行do和done之间的循环命令,直到条件为真;
–避免生成死循环。

例:计算1到10的和

#!/bin/bash

sum=0
num=10 until test $num -eq 0
do
sum=`expr $sum + $num`
num=`expr $num - 1`
done
echo "sum = $sum"

运行输出

sum = 55
6、shift语句
shift语句:将变量的值依次向左传递,并形成一组新的参数值
–例:位置变量当前值为:1=file1 2= file2 3=file3
–        执行一次shift后为:1=file2 2=file3
还可以在shift命令中指定位置变量转移的次数
–shift n
 
例:
#!/bin/bash

while [ -n "$*" ]
do
echo $1 $2 $3 $4 $5 $6
shift
done

运行输出

[fsy@localhost scripts]$ sh b.sh 1 2 3 4 5 6 7
1 2 3 4 5 6
2 3 4 5 6 7
3 4 5 6 7
4 5 6 7
5 6 7
6 7
7

7、if语句

if 语句的一般形式 :
if   条件表达式
then  #当条件为真时执行以下语句
         命令列表
else #当条件为假时执行以下语句
         命令列表
fi
  if的测试部分利用test命令实现,也可以利用一般命令执行成功与否来判断。如果命令正常结束,返回值为0,条件测试为真; 否则返回值不为0,条件测试为假

例:

#!/bin/bash

if test -f "$1"
then
echo "$1 is an ordinary file"
else
echo "$1 is not an ordinary file"
fi

运行输出:

[fsy@localhost scripts]$ sh c.sh abb
abb is not an ordinary file
[fsy@localhost scripts]$ sh c.sh a.sh
a.sh is an ordinary file
[fsy@localhost scripts]$

8、case语句

   取值后面必须为单词in,每一个模式必须以右括号结束。取值可以为变量或常数。取值检测匹配的每一个模式,一旦模式匹配,其间所有命令开始执行直至;;。执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用*号捕获该值,再接受其他输入。
 
[注]
1.模式字符串中可以使用通配符
2.如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表各模式是“或”的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令列表。
3.各模式字符串应是唯一的,不应重复出现,并且要合理安排它们的出现顺序,例如,不应将“*”作为头一个模式字符串,因为“*”可以与任何字符串匹配,若第一个出现,就不会再检查其他模式了。
4.case语句以关键字case开头,以关键字esac结束。
5.case的退出(返回)值是整个结构中最后执行的命令的退出值。若没有执行任何命令,则退出值为0.

例:

#!/bin/bash

case $1 in
1)
echo " you choice is 1";;
2)
echo " your choice is 2";;
*)
echo " your choice is others";;
esac

运行输出:

[fsy@localhost scripts]$ sh d.sh 1
you choice is 1
[fsy@localhost scripts]$ sh d.sh 2
your choice is 2
[fsy@localhost scripts]$ sh d.sh 3
your choice is others

9、break与continue

–1、break:用于立即终止当前循环的执行,break命令可以使用户从循环体中退出来。
–语法:break[n] ,其中,n表示要跳出几层循环,默认值为1
–2、continue:跳过循环体中在其之后的语句,会返回到本循环层的开头,进行下一次循环。
–语法:continue[n],其中,n表示从包含continue语句的最内层循环体向外跳到第几层循环,默认值为1,循环层数是由内向外编号。

10、函数

  函数:由函数标题和函数体两部分组成。标题是函数名。函数体是函数内在的命令集合。标题名称必须唯一。变量均为全局变量,没有局部变量。
格式:
 [function] 函数名()             或   [function]函数名() {
                 {                                                         命令1
                  命令1                                                  …
                    …                                                       }
                  }

例:

#!/bin/bash

num=1

hello()

{

        echo "hello boy~ It's our $num meeting"

        let num=num+1

}

hello

hello

hello

运行输出

hello boy~ It's our 1 meeting
hello boy~ It's our 2 meeting
hello boy~ It's our 3 meeting

11、select语句

格式:

select 变量 in 列表
do
命令行(通常用到循环变量)
done

制作一个选择表,在列表中选择一个选项执行命令行。如果选择的变量不在列表序列中,则返回一个空值。需要用break退出循环。

例子:

#!/bin/bash

echo "a is 5 ,b is 3. Please select your method: "

a=5
b=3 select var in "a+b" "a-b" "a*b" "a/b"
do
break
done case $var in
"a+b")
echo 'a+b= '`expr $a + $b`;;
"a-b")
echo 'a-b= '`expr $a - $b`;;
"a*b")
echo 'a*b= '`expr $a \* $b`;;
"a/b")
echo 'a/b= '`expr $a / $b`;;
*)
echo "input error"
esac

运行输出:

[fsy@localhost scripts]$ sh e.sh
a is 5 ,b is 3. Please select your method:
1) a+b
2) a-b
3) a*b
4) a/b
#? 1
a+b= 8

Linux:expr、let、for、while、until、shift、if、case、break、continue、函数、select的更多相关文章

  1. 【转】linux expr命令参数及用法详解

    在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...

  2. (转)linux expr命令参数及用法详解

    linux expr命令参数及用法详解 原文:http://blog.csdn.net/tianmohust/article/details/7628694 expr用法 expr命令一般用于整数值, ...

  3. Linux时间子系统之(三):用户空间接口函数

    专题文档汇总目录 Notes:用户空间时间相关接口函数: 类型 API 精度 说明 时间 time stime time_t 精度为秒级 逐渐要被淘汰.需要定义__ARCH_WANT_SYS_TIME ...

  4. linux expr命令参数及用法详解

    expr用法 expr命令一般用于整数值,但也可用于字符串.一般格式为: #expr argument operator argument expr也是一个手工命令行计数器. #$expr 10 + ...

  5. Linux kernel 内存 - 页表映射(SHIFT,SIZE,MASK)和转换(32位,64位)

    0. Intro 如下是在32位下的情况,32位下,只有三级页表:PGD,PMD,PTE 在64位情况下,会有四级页表:PGD,PUD,PMD,PTE 但是原理基本上是一样的,本文主要是想记录一下页表 ...

  6. linux中模块的构建,传参,和printk函数的简单使用

    静态编译,动态加载应用想访问内核需要通过系统调用 驱动:1.模块(打包,加入内核)2.内核机制3.操作硬件 在Kconfig里面配置menuconfig的时候,不同的类型会在图形化界面的终端显示不用的 ...

  7. linux下代替system的基于管道的popen和pclose函数

    linux下使用system需要谨慎,那么代替它的方法是什么呢? 标准I/O函数库提供了popen函数,它启动另外一个进程去执行一个shell命令行. 这里我们称调用popen的进程为父进程,由pop ...

  8. Linux系统编程(3)——文件与IO之fcntl函数

    linux文件I/O用:open.read.write.lseek以及close函数实现了文件的打开.读写等基本操作.fcntl函数可以根据文件描述词来操作文件. 用法: int fcntl(int ...

  9. 三十四、Linux 进程与信号——信号特点、信号集和信号屏蔽函数

    34.1 信号特点 信号的发生是随机的,但信号在何种条件下发生是可预测的 进程杠开始启动时,所有信号的处理方式要么默认,要么忽略:忽略是 SIGUSR1 和 SIGUSR2 两个信号,其他都采取默认方 ...

随机推荐

  1. Linux mem 2.5 Buddy 内存回收机制

    文章目录 1. 简介 2. LRU 组织 2.1 LRU 链表 2.2 LRU Cache 2.3 LRU 移动操作 2.3.1 page 加入 LRU 2.3.2 其他 LRU 移动操作 3. LR ...

  2. 《Python语言程序设计》【第2周】Python基本图形绘制

    实例2:Python蟒蛇绘制 #PythonDraw.py import turtle #import 引入了一个绘图库 turtle 海龟库--最小单位像素 turtle.setup(650, 35 ...

  3. Java 中控制执行流程

    if-else 非常常用的流程控制非 if-else 莫属了,其中 else 是可选的,if 有两种使用方式 其一: if (Boolean-expression) { statement; } 其二 ...

  4. python3下tomorow模块 @thread报语法错误def async(n, base_type, timeout=None): ^ SyntaxError: invalid syntax---解决方法

    遇见问题:python使用tomorrow实现多线程,tomorrow模块的源代码报语法错误? 这是报错信息:Traceback (most recent call last):  File &quo ...

  5. 题解 P6345 [CCO 2017]接雨滴

    解题思路 NOIP在即,感觉即将退役,或许是最后一篇题解了... 求水的体积不是特别好求,我们考虑求出 水+柱子 的体积最后再减去柱子的体积. 发现对于最高的柱子在中间的情况其实可以把最高柱子一侧的柱 ...

  6. Java安全之基于Tomcat的Filter型内存马

    Java安全之基于Tomcat的Filter型内存马 写在前面 现在来说,内存马已经是一种很常见的攻击手法了,基本红队项目中对于入口点都是选择打入内存马.而对于内存马的支持也是五花八门,甚至各大公司都 ...

  7. [spojQTREE7]Query on a tree VII

    即QTREE5和QTREE6组合,即将原本维护子树范围内点数改为维护子树范围内最小值即可,由于最小值没有可减性,因此需要使用set (虽然形式上与QTREE5类似,但QTREE5维护的信息更巧妙一些, ...

  8. Hibernate数据校验简介

    我们在业务中经常会遇到参数校验问题,比如前端参数校验.Kafka消息参数校验等,如果业务逻辑比较复杂,各种实体比较多的时候,我们通过代码对这些数据一一校验,会出现大量的重复代码以及和主要业务无关的逻辑 ...

  9. 【Tool】MySQL卸载

    MySQL卸载 2019-11-07  13:23:00  by冲冲 1.停止MySQL服务 右击"计算机" -- "管理" -- 左击"服务和应用程 ...

  10. git使用小技巧

    1. 合并一个分支的某次提交到另一个分支上 例如 将dev的某次提交 asfdiwehfsalkdnva872383 合并到master # git checkout master # git che ...