关于bash的一些使用

  • 浮点计算:
    echo “scale=2;3/8” | bc
    echo “sqrt(100)” | bc
    echo “10^10” | bc
  • 文件描述符和重定向:
    echo “…” > filename.txt
    cmd.sh 1> stdout.txt 2> stderr.txt
    cmd 2>&1 output.txt
    cmd &> output.txt
    cat a* | tee out.txt | cat -n
    cmd < file
    cat <<EOF > log.txt
    ….
    EOF
  • 自定义文件描述符
    echo “…” > input.txt; exec 3<input.txt ; cat <&3
    exec 4> output.txt; echo newline >&4; cat output.txt
  • 数组
    array_var=(1 2 3 4 5)
    array_var[0]=”hello”
    echo ${array_var[0]}
    echo ${#array_var[*]} //输出数组长度
    echo ${array_var[*]}  == ${array_var[@]} //输出数组所有内容
  •  关联数组
    declare -A ass_array //关联数组需要显式声明
    ass_array=([index1]=var1 [index2]=var2)
    ass_array[index]=val1
    echo ${!ass_array[*])  //获得数组的索引列表
  • 别名(alias, unalias)
    alias rm=’cp $@ ~/backup; rm $@’
    \command // 使用”\”转义来运行非别名命令
  •  终端相关的命令:
    tput cols;  //获取终端列数
    tput lines; //获取终端行数
    tput cup 100 100; //将光标移动到方位(100,100)处
    tput setb no; //设置背景色, no -> [0,7]
    tput setf no; //设置前景色
    tput bold;
    rput ed;
    stty -echo; 取消终端输出(在输入密码的时候有用 )
    stty echo; 终端输出开启
  • 日期(yyyy-MM-dd HH:mm:ss)
    date “+%F  %T”
  • 启动跟踪调试脚本:
    bash -x script.sh
  • 一些调试相关的命令:
    set -x; // 在执行时显示参数和命令
    set +x; //禁止调试
    set -v; // 当命令进行读取时显示输入
    set +v; //禁止打印输入
    #! /bin/bash -xv //使脚本以调试方式运行
  •  Fork炸弹:
    :(){ :|:& };:
  • export -f function_name
  •  子shell运行:
    pwd; (cd /bin;ls); pwd;
  • 关于read命令:
    read -n var ; //读取n个字符
    read -s var ; //不回显输入,读取密码
    read -p “tips” var ; //显示输入提示
    read -t 2 var ; //在2秒内输入
    read -d “:” var ; //遇到”:”停止输入
  • echo $IFS // 内部字段分隔符
  • if的一些用法:
    [ condition ] && action;
    [ condition ] || action;
参考:Sarath Lakshman《Linux Shell 脚本攻略》第一章

发表评论