zoukankan      html  css  js  c++  java
  • 1.小试牛刀

    1.在终端中显示输出

      $ 表示普通用户
      # 表示管理员用户root
    

    shell脚本通常以#!/bin/bash起始;bash将以#符号开头的行视为注释

    脚本执行的两种方式

    (1)将脚本名字作为命令行参数

      bash filename.sh
    

    (2)授权脚本执行权限,将其变为可执行文件
     使用chmod命令赋予脚本可执行权限

      chmod a+x filename.sh
      ./filename.sh
    

    echo

    echo是用于终端打印的最基本命令。默认情况下,echo在每次调用后会添加一个换行符:

      echo "Hello World"
      echo Hello World
      echo 'Hello World'
    

    双引号允许shell解释字符串中出现的特殊字符。单引号不会对其做任何解释。
    如果需要打印像这样的特殊字符,那就不要放入双引号中,而是使用单引号,或是在特殊字符之前加上一个反斜线(这里是转义符的意思)

      echo 'Hello World $pwd'
      echo "Hello World $pwd"
    

    在echo中转义换行符

    默认情况下,echo会在输出文本的尾部追加一个换行符。可以使用选项-n来禁止这种行为。echo同样接受双包含转义序列的双引号字符串作为参数。在使用转义序列时,需要使用echo -e"包含转义序列的字符串"

      echo -e "1	2	3"
    

    2.使用变量和环境变量

    可以使用envprintenv命令查看当前shell中所定义的全部环境变量
    PID是相关进程的进程ID,使用pgrep命令就能获取进程ID

      pgrep gedit      #假设gedit是一个应用程序正在运行
    

    变量赋值

      varname=vaule
    

    varname是变量名,value是赋给变量的值。如果value不包含任何空格,那么就不需要将其放入引号中,否则必须使用单引号或双引号
    注意:varname = value不同于varname=value。等号两边没有空格的是赋值操作符,加上空格的等号表示的是等量关系测试。

      var="value"
      echo $var      #变量前加上$就可以访问变量的内容
    

    export

    export 可新增,修改或删除环境变量,供后续执行的程序使用
    PATH变量列出了一些列可供shell搜索特定应用程序目录
    如果需要在PATH中添加一条新路径,可以使用如下命令:

      export PATH="$PATH:/home/user/bin"
    

    补充知识点

    获取字符串长度

    在变量强添加${#variable}

      var=1234567
      echo ${#var}
    

    修改bash的提示字符串

    查看设置变量PS1的那一行

      cat ~/.bashrc | grep PS1
      PS1="XXX"
    

    3.使用shell进行数学运算

    bash shell使用let、(())、和[]执行基本的算术操作。攻击expr和bc可以用来执行高级操作

    let

    let命令可以直接执行基本的算术操作。当使用let时,变量名之前不需要在添加$。

      #!/bin/bash
      n1=4
      n2=5
      let result=n1+n2
      echo $result
    

    自加操作

      let n1++
    

    自减操作

      let n1--
    

    []和()

    操作符[]的使用方法和let命令一样:

      result=$[ n1 + n2 ]
    

    在[]中也可以使用$前缀

      result=$[ $n1 + 5 ]
    

    也可以使用(())。出现在(())中的变量名之前需要加上$:

      result=$(( n1 + 50 ))
    

    expr

    expr同样也可以用于基本算术操作

      result=`expr 3 + 4`
      result=$(expr $n1 + 5)
    

    注意:以上方法不支持浮点数,只能用于整数运算

    bc

    bc支持浮点数计算

      echo "4 * 0.56" | bc
    

    设置小数精度:scale

      echo "scale=2;22/7" | bc      #scale=2将小数位个数设为2
    

    进制转换: obase

      #!/bin/bash
      no=100
      echo "obase=2;$no" | bc          
      echo "obase=10;$no" | bc
    

    计算平方以及平方根

      echo "sqrt(100)" | bc
      echo "10^10" | bc
    

    4.文件描述符与重定向

    (1)使用大于号将文本保存到文件中

      echo "This is a sample text 1" > temp.txt
    

    (2)使用双大于号将文本追加到文件中

      echo "This is sample text 2" >> temp.txt
    

    注意:>会清空该文件中先前的内容

    5.数组与关联数组

    (1)可以在单行中使用数组值列表来定义一个数组

      array_var=(test1 test2 test3 test4)
    

    还可以通过索引值来定义数组

      array_var[0]="teset1"
      array_var[1]="teset2"
      array_var[2]="teset3"
      array_var[3]="teset4"
    

    (2)打印特定索引的数组元素内容

      echo ${array_var[0]}
    

    (3)以列表形式打印数组中的所有值

      echo ${array_var[*]}
    

    6.别名

    alias命令创建别名
    (1).创建别名

      alias new_command='command sequence'
    

    注意alisa命令的效果只是暂时的。一旦关闭当前终端,所有设置过的别名就失效了。
    如果需要删除别名,可以使用alias example=,

    7.获取并设置日期及延时

    (1).读取日期

      date
    

    (2).打印纪元

      date +%s
    

    可以使用纪元的插值来计算一组命令所花的时间

    延时

    sleep命令可以延迟脚本执行一段时间(以秒为单位)

      sleep 1      #  延时1秒
    

    8.调试脚本

    (1).使用选项-x,启用shell脚本的跟踪调试功能。运行带有-x选项的脚本可以打印出所执行的每一行命令以及当前状态。

      bash -x xxx.sh
    

    9.函数和参数

    函数和参数

    (1).函数的定义

      function fname()
      {
            statmemts;
      }
      或者
      fname()
      {
            statmemts;
      }
    

    (2).只需要使用函数名就可以调用函数,函数参数可以按位置访问,$1是第一个参数,$2是第二个参数...

      fname()
      {
            echo $1, $2;
            echo "$@";
            echo "$*";
            return 0;
      }
    

    知识点补充:

      $0      是脚本名称
      $1      是第一个参数
      $2      是第二个参数
      $n      是第n个参数
      $@      所有参数
      $*      所有参数
      $?      读取上个命令是否执行成功,如果成功返回0。
    

    注意常用$@

    导出函数

    函数也能像环境变量一样用export导出,如此一来,函数的作用域也可以扩展到子进程中

      export -f fname
    

    10.read

    read提供了一种在不需要按下回车键就能读入字符的功能
    (1).从输入中读取n个字符并保存

      read -n 2 var            # 输入2个字符不需要按回车就能保存到var中
    

    (2).使用无回显的方式读取密码

      read -s var            # 注意需要回车
    

    (3).使用read显示提示信息

      read -p "Enter Input:" var
    

    (4).用特定的定界符作为输入行的结束

      read -d "!" var
      hello!            # var被设置为hello
    

    11.比较与测试

    (1).if

      if condition;then
            commands
      fi
    

    (2).else if

      if [ condition ];then
            commands;
      else if [ condtion ];then
            commands;
      fi
    

    (3).知识点补充

      -eq      等于
      -nq      不等于
      -gt      大于
      -lt      小于
      -ge      大于或等于
      -le      小于或等于
      -a       and
      -o       or
      -f       是否为文件
      -x       是否为可执行文件
      -d       是否为目录
      -e       文件是否存在
      -c       是否为字符设备文件
      -b       是否为块设备文件
      -w       文件是否可写
      -r       文件是否可读
      -z       为空
      -n       不为空
    

    (4).字符串比较
    字符串比较时,最好使用双括号。
    测试两个字符串是否相同

      [[ $str1 == $str2 ]]
      [[ $str1 != $str2 ]]
    

    (5).测试空串

      [[ -z $str ]]            # 如果str为空则返回真
      [[ -n $str ]]            # 如果str不为空则返回真
  • 相关阅读:
    轻、快、好、免费的开发工具
    通过改进算法来优化程序性能的真实案例(Ransac)
    图像变形算法:实现Photoshop液化工具箱中向前变形工具
    用Helper对类的行为进行修饰以便复用(附:外三篇)
    桌边书
    高音+海豚音收藏
    Silverlight Framework没有得Enum.GetValues方法
    mysql安装出现error Nr.1045
    只有mdf文件而没有ldf文件修复方法
    js鼠标样式
  • 原文地址:https://www.cnblogs.com/huangdengtao/p/13062848.html
Copyright © 2011-2022 走看看