高级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 $

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

    例:cp t.

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

  • > 创建&覆盖

    >> 创建&追加

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

    例: 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很简单,但还是花了一段时间。爱了就爱了以前常说:不怕走就怕停。应当铭记

posted @ 2020-09-26 16:56  一个李长兴  阅读(209)  评论(0编辑  收藏  举报