• 《Linux shell 脚本攻略》第1章——读书笔记


    文件描述符及重定向

    echo "This is a sample text 1" > temp.txt 
    # 文本重定向,截断文件的方式
    # 意思是在把echo命令的输出写入文件前,temp.txt文件会被清空
    cat temp.txt
    echo "----"
    echo "This is a sample text 2" >> temp.txt
    # 追加文件方式
    cat temp.txt
    
    This is a sample text 1
    ----
    This is a sample text 1
    This is a sample text 2
    

    错误信息输出
    成功和不成功的命令
    当一个命令发生错误并退回时,它会返回一个非0的退出状态

    退出状态怎么看?
    echo $?就可以打印出退出状态

    # 会将stderr文本打印到屏幕上,而不是文件,因为没有
    ls + > out.txt
    
    
    # stderr转换成stdout,使得stderr和stdout都被重定向到同一个文件中
    ls + >output.txt 2>&1
    
    
    # tee追加方式写入
    cat out.txt | tee -a out.txt | cat -n
    

    bash

    函数和参数

    以两种方式实现fabonacii数列为例

    #!/bin/bash
    
    #递归方式实现斐波那契数列
    function fib()
    {
      var=$1
      if [[ $var = 1 || $var = 2 ]]; then
        var=1
      elif [[ $var -lt 1 ]]; then
        return
      else
        var=`echo "$(fib $(( $var-2 ))) + $(fib $(( $var-1 )))" | bc `   
      fi
      echo $var
      return $?
    }
    
    #递推方式实现斐波那契数列
    function fib2()
    {
      array_list=(0 1 1)
      var=$1
      if [[ $var -lt 1 ]]; then
        return
      fi
      for((i=3;i<=$var;i++));do
        array_list[$i]=`echo "${array_list[$(($i-1))]} + ${array_list[$(($i-2))]}" | bc `
      done
      echo ${array_list[$var]}
      return $?
    }
    n=$1
    result=$(fib $n)
    echo $result
    
    result=$(fib2 $n)
    echo $result
    
    
    

    迭代器

    #!/bin/bash
    
    # 三种循环方式
    function loop()
    {
      for((i=0;i<10;i++)){
        echo $i
      } 
      count=0
      while [[ $count -ne 10 ]]; do
        # count=`echo "$count + 1" | bc`
        let count++
        echo $count
      done
      
      count=0
      until [ $count -eq 10 ]; do
        let count++
        echo $count
      done
      
      
    }
    
    
    loop
    

    算术比较

    -eq      相等
    -ne      不相等
    -gt      大于
    -lt      小于
    -ge      大于等于
    -le      小于等于
    

    文件系统相关测试

    p39

    -f      是否是文件
    -x      是否是可执行
    -d      是否是目录
    -e      是否存在
    -c      是否是字符设备文件
    -b      是否是块设备文件
    -w      是否是可写文件
    -r      是否是可读文件
    -L      是否是符号链接
    
    e.g.
    
    #!/bin/bash
    
    function sys_test()
    {
      # 文件存在
      fpath="/etc/passwd"
      [ -e $fpath ] && echo "file exist"
      
    
      # 文件不存在
      fpath='/qwdwq/qwdwqd'
      [ -e $fpath ] || echo "file not exist"
    
    }
    
    sys_test
    
    

    字符串进行比较

    #!/bin/bash
    
    function str_cmp()
    {
      str1=$1
      str2=$2
      if [ -z $str1 ] || [ -z $str2 ];then
        echo "empty"
        return 1
      fi
      if [[ $str1 > $str2 ]];then
        echo "$str1 is bigger then $str2"
      elif [[ $str1 < $str2 ]];then
        echo "$str2 is bigger then $str1"
      elif [[ $str1 == $str2 ]]; then
        echo "$str1 equels to $str2"
      fi
      return 0
    }
    
    
    str_cmp $1 $2
    
  • 相关阅读:
    java 显示当前的时间
    java RandomAccessFile 向文件中写入数据,怎么样不覆盖原来的数据
    NCARG 6.2.0 安装方法
    【转】在Fedora 9下用IFC安装MM5
    Linux下GrADS的安装
    我的博客园
    nyist 2 括号配对问题
    nyist 100 1的个数
    进制(堆栈)
    进制
  • 原文地址:https://www.cnblogs.com/zhenggaoxiong/p/12732783.html
Copyright © 2020-2023  润新知