码迷,mamicode.com
首页 > 系统相关 > 详细

shell学习笔记

时间:2016-11-04 20:11:57      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:ade   之间   结构   文件   返回   算术运算   tty   大小   匹配   

1. shell脚本参数

  • $n 表示传递给脚本的第n个参数,例如$1 表示第1个参数,$2表示第2个参数....
  • $# 命令行参数的个数
  • $0 当前脚本的名称
  • $* 以“参数1 参数2 参数3...”的形式返回所有参数的值
  • $@ 以“参数1”“参数2”“参数3”...的形式返回所有参数的值
  • $_ 保存之前执行的命令的最后一个参数
  • $? 前一个命令或者函数的返回状态码
  • $$ 返回本程序的进程ID(PID)

注:变量$@可以以“参数1”“参数2”“参数3”..的形式返回所有的参数的值,因此,$@与“$1”"$2""$3"...是等价的;如果用户传递的参数中包含空格或者其他的特殊字符,需要使用$@来获取所有的参数的值,不能使用$*。


2. 变量和引用

  • 在shell中,变量名的大小写是敏感的,因此,大小写不同的两个变量名并不代表同一个变量。
  • m=${x/acd/1}---将x中的acd变成1并赋值给m。
    # x=acdqw12
    # m=${x/acd/1}
    # echo $m
    #m=1qw12
  • 3种引号的不同:单引号(‘‘)括起来的字符都作为普通字符出现--全引用;双引号(“”)括起来的字符除“$” “\” “‘” “"”这几个字符仍保留其特殊功能外,其余字符仍作为普通字符对待--部分引用;反引号(``)括起来的字串被shell解释为命令,在执行时,shell首先执行该命令,并以它的标准输出结果取代整个反引号部分。
  • 反斜线“\”称为转义字符,用于将一些shell中的特殊字符转换为普通字符,例如“$”或者“‘”等.
    # echo $SHELL
    # /bin/bash;
    
    # echo \$SHELL
    # $SHELL.
  • 按照惯例,shell中的环境变量全部使用大写字母表示。
  • 命令替换:反引号和圆括号是等价的;
    `shell_command`==$(shell_command)
  • 变量赋值语法:variable_name=value;variable_name表示变量名;value表示将要赋值给变量的值;中间的等号“=”称为赋值符号,赋值符号的左右两边不能直接跟空格,否则shell会将其视为命令;正确的赋值语句:
    # v1=Linux
    # v2=RedHet Linux
    # v3="Redhat Linux $HOSTTYPE"
    # v4=12345.
  • 清除变量:
    unset variable_name

3. 条件测试

  • 条件测试的语法有两种:test和[;test expression;[ expression ]; expression与左右方括号之间也必须都保留一个空格。
  • 在测试运算符“=”、“!=”、“-z”等符号的左右两边,一定含有一个空格。
  • 整数测试语法:
    test number1 op number2或者[ number1 op number2 ]
    op表示运算符;运算符:-eq (等于);-ne(不等于);-gt(大于);-lt(小于);-ge(大于等于);-le(小于等于);[ 12 -gt 14 ]-->echo $? 1。
  •  文件测试语法:
    test op file或者[ op file ]
    -a file文件是否存在;-b file 文件是否存在且为块文件;-c file 文件是否存在且为字符文件;-d file 文件是否存在且为目录;-e file同-a一样;-s file 文件的长度是否大于0或者文件为非空文件;-f file 文件存在且为常规文件;-w file 文件是否存在且可写;-x file 文件是否存在且可执行;-r file 文件是否存在且可读;-u file 文件是否设置suid位;-l file 文件是否存在且为符号链接。
  • 逻辑操作符:字符串测试、整数测试、以及文件都是提供了一个测试条件,而在shell编程中,经常遇到同时判断多个条件的情况,逻辑操作符可以把多个不同的条件组合起来,从而构成一个复杂的条件表达式;
    ! expression 逻辑非
    expression -a expression2 逻辑与
    expression1 o expression2 逻辑或
  • “:”冒号是一个特殊的命令,指空命令,该命令不做任何事情,但是它的退出状态永远是0,如果我们将改命令作为if语句中的条件,则会永远执行then子句。
  • 条件判断语句:if
    if expression
    then
       statement1
       statement2
       ...
    fi
    或者

    if expression;then
    statement1
    statement2
    fi

    if else

    #!/bin/bash
    echo "please enter a score" #输入提示信息
    read score #读取用户输入数据
    
    #如果用户没有输入数字,提示用户重新输入
    if [ -z "$score" ];then  #-z是否为空串
       echo "You enter nothing.Please enter a score:"
       read score
    else 
    #如果用户输入的数据不对,则重新输入
        if [ "$score" -lt 0 -o "$score" -gt 100 ]; then
          echo "The score should be between 0 and 100.Please enter   again:"
          read score
        else 
    #输出A
            if [ "$score" -ge 90 ]; then
               echo "The grade is A."
            else
    #输出B
                if [ "$score" -ge 80 ]; then
                    echo "The grade is B."
                else
    #输出C
                     if [ "$score" -ge 70 ]; then
                          echo "The grade is C."
                     else
    #输出D
                          if [ "$score" -ge 60 ]; then
                              echo "The grade is D."
                          else
    #输出E
                               echo "The grade is E."
                           fi
                      fi
                 fi
             fi
         fi
    fi

     if elif

    #!/bin/bash
    echo "please enter a score" #输入提示信息
    read score #读取用户输入数据
    
    #如果用户没有输入数字,提示用户重新输入
    if [ -z "$score" ];then  #-z是否为空串
       echo "You enter nothing.Please enter a score:"
       read score
    else 
    #如果用户输入的数据不对,则重新输入
        if [ "$score" -lt 0 -o "$score" -gt 100 ]; then
          echo "The score should be between 0 and 100.Please enter   again:"
          read score
        else 
    #输出A
            if [ "$score" -ge 90 ]; then
               echo "The grade is A."
    #输出B
            elif [ "$score" -ge 80 ]; then
                echo "The grade is B."
    #输出C
            elif [ "$score" -ge 70 ]; then
                echo "The grade is C."
    #输出D
            elif [ "$score" -ge 60 ]; then
                echo "The grade is D."
            else
    #输出E
                echo "The grade is E."
             fi
         fi
    fi

    case

    case variable in
    value1)
        statement1
        statement2
        ...
        statementn;;
    value2)
         statement1
         statement2
         ...
         statementn;;
    ...
    valuen)
         statement1
         statement2
         ...
         statementn;;
    *)
         statement1
         statement2
         ...
         statementn;;
    esac

    在上面的语法中,variable是一个变量,case语句会将该变量的值与value1~valuen中的每个值进行比较,如果与某个value的值相等,则执行该value所对应的一组语句。当遇到“;;”符号的时候,就跳出case语句,执行esac语句后面的语句,如果没有任何一个值与variable的值相匹配,则执行*后面的一组语句。

        注:对于上面的case语句,用户应该注意以下几点:

         i 对于变量名variable,可以使用双引号,也可以不使用;

         ii 每个case子句中的条件测试部分,都以右括号“)”结束;

         iii 每个case子句都以一对分号“;;”作为结束符,在脚本执行的过程中,当遇到一对分号时,会跳过当前case子句后面的所有的case子句,包括*所对应的子句,执行esac子句后面的其他语句。

        iv case语句结构以esac结尾。

 

4. 计算运算表达式

  • expr expression 计算某个表达式的值 使用expr时,需要对运算符号进行转移,\*  \(  \)  .
    #!/bin/bash
    result=`expr 2 - 100`
    echo "$result"
    
    result=`expr 2 \* 100`
    echo "$result"
    
    
    result=`expr \( 2 - 6 \) \* 2`
    echo "$result"

     

  • 使用$(( )) 来进行算术运算,无需对运算符和括号做转移处理。
    #!/bin/bash
    result=$((3+6))
    echo "$result"
    
    
    result=$((3*6))
    echo "$result"
  • 使用$[...] 与$(())用法相同
  • 使用let命令可以执行一个或者多个算术表达式,其中的变量名无需使用$符号,如果表达式中含有空格或其他特殊字符,则必须将其引用起来。
    #!/bin/bash
    n=10
    let n=n+1
    echo "$n"
    
    let n=n*10
    echo "$n"

5. 位运算符

运算符 说明 举例
<< 左移 4<<2,将4左移2位,结果为16
>> 右移 8>>2,将8右移2位,结果为2
& 按位与 8&&4,将8和4进行按位与运算,结果为0
| 按位或 8|4,将8和4进行按位或运算,结果为12
~ 按位非 ~8,将8进行按位非运算,结果为-9
^ 按位异或 10^6,将10和6进行按二进制位异或运算,结果为12

         

更新中。。。。。

shell学习笔记

标签:ade   之间   结构   文件   返回   算术运算   tty   大小   匹配   

原文地址:http://www.cnblogs.com/Alysa-lrr/p/6027606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!