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 逻辑或,两个操作数一个为真,结果为真,否则为假。
    ! 逻辑非,条件为假,结果为真,否则为假。


  • 相关阅读:
    10 个雷人的注释,就怕你不敢用!
    Java 14 之模式匹配,非常赞的一个新特性!
    poj 3661 Running(区间dp)
    LightOJ
    hdu 5540 Secrete Master Plan(水)
    hdu 5584 LCM Walk(数学推导公式,规律)
    hdu 5583 Kingdom of Black and White(模拟,技巧)
    hdu 5578 Friendship of Frog(multiset的应用)
    hdu 5586 Sum(dp+技巧)
    hdu 5585 Numbers
  • 原文地址:https://www.cnblogs.com/cz-blog/p/4109988.html
Copyright © 2011-2022 走看看