zoukankan      html  css  js  c++  java
  • 高级Bash脚本编程指南笔记

    高级Bash脚本编程指南笔记

    最近在补Linux的实验楼,不会的太多了,所以我又来了:p。网址:高级Bash脚本编程指南

    入门

    vim编写*.sh即可

    编写

    • 代码头需要添加#!/bin/bash,表示由/bin目录下的bash解释执行

    运行

    • bash *.sh
    • sh *.sh
    • . .*.sh

    重定向

    • echo "Hello" > my.txt直接新建保存文本

    • 可将地址作为变量(调用时需要加$),并将linux作为代码的一部分

      例:

      #!/bin/bash

      LOG_DIR=/var/log

      cd $LOG_DIR

      cat /dev/null > wtmp

      echo "Logs cleaned up."

      exit

      PS:/dev/null为空,可配合cat与重定向清除文件内容

    bash特殊字符

    • # 注释

    • ; 分隔命令(压行压行压行);比如这样;也可以用来终止case;;酱

    • “双引号”与’单引号‘ 双引号会解释部分特殊字符,单引号则不解释

      例:

      > HOME='shiyanlou'
      > echo $HOME
      shiyanlou
      > echo "$HOME"	#解释为变量
      shiyanlou
      > echo '$HOME'	#作字符
      $HOME
      
    • ` 优先执行

      例:

      cp `mkdir back` test.sh back会先mkdir back创建back目录,再cp test.sh back将test.sh放入back目录中

    • 与True等价|占位符|: > 清空|:>>创建新文件|不关闭错误检查的注释|分隔符

    • 三元运算符

    • $ 变量

    • () 子shell|开数组

      例:arr=(1 4 5 7 9 21) echo ${arr[3]}

    • {} 文件名扩展|代码块(匿名内建函数)

      例:cp t.{txt,back}

    • [] 条件表达式,[[ ]]可直接判断

    • > 创建&覆盖

      >> 创建&追加

    • | 管道,前输出传入后输入

      例: test.sh作用为小写转大写,ls -l| ./test.sh可打印大写文件名

    • - 加参数

      例: if ["$a" -eq "$b"]比较是否相等(equal to),还有-lt(less than)与-gt(greater than)

    • ~ 表示HOME

    变量和参数

    • 使用readonly <var>定义只读变量
    • 位置参数$0,$1……,$9,${10},${11},$0为文件名。还有一些特殊用法,如$#:传递到脚本的参数个数, $*:以一个单字符串显示所有向脚本传递的参数。

    基本运算符

    • bash不支持原生运算,可通过expr实现

    • 算数运算符

      符号间需要加入充分的空格,特殊符号如*需要*

    • 关系运算符

      -e相等n不g大l小

    • 字符串运算符

      =等 !=不等 -z为0 -n不为0 str为空

    流程控制

    bash的流程控制很骚,结束字符就是开始字符的反向。比如if-fi,case-esac

    语句与python啥的大同小异,不过是if-then-elif-else-fi这样的结构,个人觉得更合理一些,上几串代码算了

    a=10
    b=20
    if [ $a == $b ]
    then
       echo "a == b"
    elif [ $a -gt $b ]
    then
       echo "a > b"
    elif [ $a -lt $b ]
    then
       echo "a < b"
    else
       echo "Ineligible"
    fi
    

    PS:可不是水o,先培养下写博客记录和敲字的习惯(逃

    for loop in 1 2 3 4 5 
    do     
    	echo "The value is: $loop" 
    done
    
    while(( $int<=5 ))
    do
        echo $int
        let "int++"
    done
    
    read aNum
    case $aNum in
        1)  echo 'You have chosen 1'
        ;;
        2)  echo 'You have chosen 2'
        ;;
        3)  echo 'You have chosen 3'
        ;;
        4)  echo 'You have chosen 4'
        ;;
        *)  echo 'You did not enter a number between 1 and 4'
        ;;
    esac
    

    break,continue啥的都一样

    函数

    #!/bin/bash
    funWithReturn(){
        echo "This function will add the two numbers of the input..."
        echo "Enter the first number: "
        read aNum
        echo "Enter the second number: "
        read anotherNum
        echo "The two numbers are $aNum and $anotherNum !"
        return $(($aNum+$anotherNum))
    }
    funWithReturn
    echo "The sum of the two numbers entered is $? !"
    

    值得注意的是调用函数后用$?获得返回值

    后记:虽然bash很简单,但还是花了一段时间。爱了就爱了以前常说:不怕走就怕停。应当铭记

  • 相关阅读:
    Linux 查看进程文件文件位置
    硬盘io检查
    centos 一些需要注意的问题
    docker 日常使用问题
    Linux命令行访问网站工具
    开箱即用instantbox
    docker 使用
    在js中关于同名变量和函数的地位争夺问题
    玩转图片上传————原生js XMLHttpRequest 结合FormData对象实现的图片上传
    在vue组件中style scoped中遇到的坑
  • 原文地址:https://www.cnblogs.com/Ziggy29/p/13735676.html
Copyright © 2011-2022 走看看