Linux笔记--shell总结(3)

来源:互联网 发布:亚瑟士跑鞋矩阵 编辑:程序博客网 时间:2024/06/06 13:44

经过前两个总结,你应该已经明白了什么是shell脚本?首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。说白了,shell脚本就是一些命令的集合。

[基本结构以及如何执行]:
Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。’#’表示注释,在前面讲过的。后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等。该脚本再往下面则为要运行的命令了。

这里写图片描述

Shell脚本的执行很简单,直接”sh filename “ 即可,另外你还可以给文件加上可执行权限,在直接执行。默认我们用vim编辑的文档是不带有执行权限的,所以需要加一个执行权限,那样就可以直接使用’./filename’ 执行这个脚本了。
这里写图片描述
另外使用sh命令去执行一个shell脚本的时候是可以加-x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题。

这里写图片描述
该shell脚本中用到了’date’这个命令,它的作用就是用来打印当前系统的时间。其实在shell脚本中date使用率非常高。
这里写图片描述
这里写图片描述

[变量]:

使用shell来计算两个变量的和:
这里写图片描述
这就用到了read命令了,它可以从标准输入获得变量的值,后跟变量名。”read x”表示x变量的值需要用户通过键盘输入得到。
这里写图片描述
更简洁的书写方式:
这里写图片描述
read -p 选项类似echo的作用。执行如下:
这里写图片描述

如下一个程序:
这里写图片描述
在脚本中,你会不会奇怪,哪里来的$1和$2,这其实就是shell脚本的预设变量,其中$1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的$2,当然一个shell脚本的预设变量是没有限制的,这回你明白了吧。执行如下:
这里写图片描述

  • 扩展
    $0 当前脚本的文件名
    $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
    $# 传递给脚本或函数的参数个数。
    $* 传递给脚本或函数的所有参数。
    $@ 传递给脚本或函数的所有参数。被双引号(” “)包含时,与 $* 稍有不同,下面将会讲到。
    $? 上个命令的退出状态,或函数的返回值。
    $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

  • $* 和 $@ 的区别

    $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(” “)包含时,都以”$1” “$2” … “$n” 的形式输出所有参数。

    但是当它们被双引号(” “)包含时,”$*” 会将所有的参数作为一个整体,以”$1 $2 … $n”的形式输出所有参数;”$@” 会将各个参数分开,以”$1” “$2” … “$n” 的形式输出所有参数。

[ if 语句]:

  1. 不带else

    if 判断语句; then
    command
    fi
    这里写图片描述
    在if1.sh中出现了 ((a<60))这样的形式,这是shell脚本中特有的格式,用一个小括号或者不用都会报错,请记住这个格式即可。执行结果为:
    这里写图片描述

  2. 带有else

    if 判断语句 ; then
    command
    else
    command
    fi
    这里写图片描述
    执行结果为:
    这里写图片描述

  3. 带有elif

    if 判断语句一 ; then
    command
    elif 判断语句二; then
    command
    else
    command
    fi
    这里写图片描述
    执行结果为:
    这里写图片描述
    以上只是简单的介绍了if语句的结构。在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”。但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)。

shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的几个选项:

-e :判断文件或目录是否存在

-d :判断是不是目录,并是否存在

-f :判断是否是普通文件,并存在

-r :判断文档是否有读权限

-w :判断是否有写权限

-x :判断是否可执行

使用if判断时,具体格式为: if [ -option filename ] ; then

[循环语句]:

  • for语句
    这里写图片描述
    脚本中的seq 1 100 表示从1到100的一个序列,如此,其意义就很明显了,累加1到100并输出。
    这里写图片描述

  • while语句
    这里写图片描述
    输出结果为:
    这里写图片描述

[函数]:
有时候脚本中的某段代总是重复使用,如果写成函数,每次用到时直接用函数名代替即可,这样就节省了时间还节省了空间。
这里写图片描述

fun.sh 中的sum() 为自定义的函数,在shell脚本中要用

function 函数名() {
command
}
执行结果为:
这里写图片描述

0 0
原创粉丝点击