zoukankan      html  css  js  c++  java
  • shell编程笔记1

    参考文章:1 http://blog.csdn.net/wuwenxiang91322/article/details/9259877   通过chmod改变文件权限

    补充知识

    Linux文件的三种身份和四种权限,三种身份分别为:

    1. u:文件的拥有者
    2. g:文件所属的群组
    3. o:其他用户

      对于每个身份,又有四种权限,分别为:

    1. r:读取文件的权限(read)
    2. w:写入文件的权限(write)
    3. x:执行的权限(execute)
    4. s:特殊权限

     Linux中有两种表示文件权限的方式,分别为数字以及符号表示方式。

    3 chmod以数字形式改变文件权限 :chmod 755 test.sh (解释:读 写 执行 权值依次是:4 2 1 而755依次代表用户 用户组 其他用户对应的权   限,将755换算成 字符形式,为rwxr-xr-x,也就是说文件的拥有者、所属群组 以及其他用户都可以读取与运行test.sh这个文件,但是只有拥有者自己可以写入这个文   件,也就是其他人无权修改test.sh这个文件。(当然 root用户无此限制,想改谁就该谁,这也是一个体现root账号至高无上权力的体验

     chmod以字符形式改变文件权限 :

    chmod u+x test.sh  只给拥有者加上可执行权限

    chmod g+x test.sh  只给群组身份加上可执行权限

    chmod o+x test.sh  只给其他人身份加上可执行权限

    chmod a+x test.sh  给所有人都赋予x权限

    chmod o-x test.sh  如果要去掉某个身份的某个权限,只需要将+变为-即可,例如去除其他人身份的可执行权限:

    shell 脚本的编写流程如下:

      1. 在编辑器中编辑 shell 脚本文件。
      2. 将该文件保存为“*.sh”文件。
      3. 增加脚本文件的可执行权限。  如:sudo chmod a+x test.sh(因为一般用户没有shell的执行权限)
      4. 使用相对路径名执行脚本文件。

    编写shell的习惯:一般情况下,最后在文件打开始写上注释.第一,因为shell有多个版本,在不同的linux操作系统下,shell是不 同的.比如,在ubuntu下是bash,所以首先表明编写的是什么shell脚本,如果不知道,在终端中输入echo $SHELL查看shell版 本.第二,写上本shell脚本的注释说明,即函数的目的,参数的意义.这其实和编写其他编程语言是一样的,便于别人了解自己所写脚本打含义.

    正文: 

    一 变量

    shell 语言中可以使用变量,不过这里的变量不同于其他的高级语言中的变量。shell 脚本中的变量在使用时并不需要提前定义,也就是说每一个变量都可以在程序员需要时就使用。因为大部分 Linux 命令使用的是小写字母,而大多数的 shell 中的环境变量是使用大些字母表示的。因此,在 shell 脚本中出现的用户自定义变量最好使用小写字母,这样可以很好地区别 shell 中的环境变量。可以在终端中输入 set查看全部系统定义变量.使用 unset 命令可以删除变量的赋值,使变量的值为空。如果用户需要清除一个变量的值可以这样做,其等效于将这个变量赋值为空。shell中脚本变量对大叫写敏感的,这与linux以及很多高级编程语言一样的.注释使用"#"

    1. 声明变量:如name="xiao ming"
    2. 使用变量:如:echo $name            #echo 表示输出,$表示取name 的值.
    3. 表达式求值:  方式1 应该使用 expr 命令 expr 命令中可以使用数学运算符。例如,数字比较操作、整数运算操作或者逻辑操作等。方式2 在 shell 脚本中也可以使用双括号代替 expr 命令计算表达式的值。其形式如下:$((表达式)) 如:  expr 3+2 与$((3+2))是一样的
    4. shell 脚本中的变量很特别,因为在这里变量并不区分类型。这一点与 C 语言以及其他的一些编程语言完全不同,也容易使初学者感到困惑。本质上,shell 脚本中的变量都是字符串,在对变量的解释上则依赖于 shell 脚本中的变量定义.
    5. 位置变量:在运行一个 shell 脚本时可以向脚本传递命令行参数,这些命令行参数可以在 shell 脚本内部被引用到。根据每一个命令参数的位置,在 shell 中可以使用$1 至$9 来表示。$0 表示当前执行进程的文件名,也就是程序的执行文件名。

    二 退 出 状 态

    exit 命令用于结束一个 shell 脚本的运行,就像 C 语言中的调用“exit(0)”,或者在main 函数中“return 0;”一样。shell 脚本在结束运行时也返回一个值,并且这个值会传递给调用脚本的父进程。这个父进程通常就是 shell,但是有些时候一些其他的用户程序也会调用 shell 脚本。父进程接收到这个值(其实这个值作为子进程结束状态的一部分)后,做下一步的处理.每个 shell 命令在结束执行时都会返回一个退出状态码。成功执行了该命令则返回 0;否则,不成功的命令将返回一个非零值。非零值通常都被解释成一个错误码,从惯例的角度来讲返回 0 代表正常。如果返回一个非零值,则表示进程出现了异常。这时候需要根据退出状态码找到进程退出的原因。通常来讲程序员和系统管理员之间应当约定一个退出状态码的协议,这样便于系统管理员帮助程序员发现错误。注意:退出状态码必须是十进制数,范围必须是 0 至 255。当脚本以不带参数的 exit 命令来结束时,脚本的退出状态码就由脚本中最后执行的命令来决定。也就是 exit 之前的命令。下面实例演示了 shell 脚本的退出状态码的使用,该脚本调用一个用户编写的简单程序。读者可以对比使用 exit 命令退出和不使用该命令退出的两个版本的 shell 脚本的区别。

    三 条 件 测 试


    1 条件测试命令一般有两种格式。1 test condition 2 [ condition ] 注意:使用“[ ]”时,要在条件和“[ ]”之间加上空格。
    测试文件状态的条件表达式很多,但是最常用几个如下所示。
    -d 文件是否为目录;
    -s 文件是否长度大于 0;
    -f 文件是否是普通文件;
    -L 文件是否是符号链接;
    -u 文件是否设置了 suid 位;
    -r 文件是否可读;
    -w 文件是否可写;
    -x 文件是否可执行。
    当条件测试的返回状态是 0 时,则表示测试成功,否则失败。下面实例测试 test.txt 文件是否可读、可写和可执行的。该脚本中使用两种条件测试的方法,读者可以对照理解。
    (1)在 vi 编辑器中编辑该脚本如下:
    #!/bin/sh
    # file.sh 测试 test.txt 文件是否可读可写可执行
    #测试 test.txt 文件的读权限,使用“[ ]”的方法
    [ -r test.txt ]
    echo $?
    #测试 test.txt 文件的写权限,使用“[ ]”的方法
    [ -w test.txt ]
    echo $?
    #测试 test.txt 文件的执行权限,使用“[ ]”的方法
    [ -x test.txt ]
    echo $?
    #测试 test.txt 文件的读权限,使用“test 命令”的方法
    test -r test.txt
    echo $?
    #测试 test.txt 文件的写权限,使用“test 命令”的方法
    test -w test.txt
    echo $?
    #测试 test.txt 文件的执行权限,使用“test 命令”的方法
    test -x test.txt
    echo $?
    exit 0
    (2)
    编写好脚本后,
    增加 shell 脚本文件的可执行权限。
    可以使用 chmod 命令增加 file.sh
    文件的可执行权限。
    $ chmod u+x file.sh
    (3)使用 ls 命令查看 test.txt 的权限信息。
    $ls –l test.txt
    -rw-r--r--
    1
    root
    0
    Feb
    7
    04:50
    test.txt
    (4)在 shell 中运行该 shell 脚本如下:
    0
    0
    1
    0
    0
    1
    运行结果说明 test.txt 文件只有可读写的权限,但是没有可执行的权限。

    下面实例测试,传入脚本的文件名的文件是否是普通文件、目录文件和符号链接。该脚本使用位置变量作为文件名进行测试。
    (1)在 vi 编辑器中编辑该脚本如下:
    #!/bin/sh
    # test.sh 测试文件的种类
    #第一个文件是一个普通文件
    [ -f $1]
    echo $?
    #第二个文件是一个目录文件
    [ -d $2]
    echo $?
    #第二个文件是一个符号链接
    [ -l $3]
    echo $?
    #运行的 shell 脚本本身也是一个普通文件
    [ -f $0]
    echo $?
    exit 0
    (2)
    编写好脚本后,
    增加 shell 脚本文件的可执行权限。
    可以使用 chmod 命令增加 test.sh
    文件的可执行权限。
    $ chmod u+x test.sh
    (3)使用 mkdir 命令创建一个目录 dir。
    $mkdir dir
    (4)使用 symlink 命令创建一个符号链接。
    $symlink link test.txt
    (5)在 shell 中运行该 shell 脚本如下:
    $./test.sh test.txt dir link
    0
    0
    0
    0
    试验结果说明每一步的测试都是成功的,每个文件的类型都和预期的一样。

    测试时使用逻辑操作符
    与 C 语言类似,shell 脚本中同样提供三种逻辑操作完成此功能。逻辑运算符通常和分
    支语句配合使用,实现程序执行流程的不同。

    -a 逻辑与,两个操作数均为真,结果为真,否则为假。
    -o 逻辑或,两个操作数一个为真,结果为真,否则为假。
    ! 逻辑非,条件为假,结果为真,否则为假。


  • 相关阅读:
    Spring Boot整合Freemarker
    Spring Boot异常处理
    CSAPP缓冲区溢出攻击实验(下)
    SparkSQL基础应用(1.3.1)
    程序员的自我修养:(1)目标文件
    CSAPP缓冲区溢出攻击实验(上)
    Redis源码学习:字符串
    六星经典CSAPP-笔记(7)加载与链接(上)
    Redis源码学习:Lua脚本
    六星经典CSAPP-笔记(10)系统IO
  • 原文地址:https://www.cnblogs.com/cz-blog/p/4109988.html
Copyright © 2011-2022 走看看