• Linux的 Shell 理解和使用


    Shell为命令解释器,把用户命令解释为内核可识别的机器语言,然后翻译命令结果给用户,其也是一个强大的编程语言,是解释执行的脚本语言,无编译,与python机制基本相同。

    Shell内部可以直接调用Linux系统命令

     

    echo命令的基本使用

    【echo “内容“ 】输出命令

    【echo -e “内容“ 】输出,并支持转义字符

    转义符:

    【 】制表符,tab键

    【a】警告音,

    【】退格,删除左边一个字符、

    【c】取消最后的换行,与-n效果一致、

    【f】换页符,横向占位

    【v】与上相同

    【 】换行

    【 】回车,光标回到行首

    \】

    【echo -e "e[1;31m 输出内容 e[0m"】红色输出abd

    其中:【e[1;】表示开始标志,【[0m】为结束标志,【31m】表示颜色,可有(黑色 30m)(红色 31m)(绿色 32m)(黄色 33m)(蓝色 34m)(洋红 35m)(青色 36m)(白色 37m)

     

    输入输出重定向

    标准输入:键盘(/dev/stdin)

    标准输出:显示器(/dev/stdout)

    标准错误输出:显示器(/dev/stdout)

    输出重定向:

    【命令 > 文件】以覆盖的方式把正确输出重定向到文件中

    【命令 >> 文件】以追加的方式把正确的输出重定向到文件中

    【命令 2> 文件】标准错误输出重定向,覆盖

    【命令 2>> 文件】标准错误输出重定向,追加

    【命令 >>正确文件  2>>错误文件】对命令判断,分别保存命令结果

     

    多命令顺序执行

    【命令1; 命令2;命令3】执行命令1到3,错误不影响下一个命令执行

    【命令1 && 命令2 && 命令3】前面的命令必须正确执行,才能执行后面的命令

    【命令1 || 命令2】命令1正确执行,就不会执行命令2,命令1错误时才会执行命令2

    【命令 && echo yes || echo no】判断命令是否正确执行

    【命令1 | 命令2】命令1的正确输出作为命令2的操作对象,管道符

    如:【ls -lh /usr/bin | grep -i --color=auto pip3】查看pip3的执行文件

     

    通配符

    匹配文件名,对于命令:ls 、find、cp

    【?】匹配任意一个字符

    【*】匹配任意0个或多个字符,如【rm -r *】删除目录下所有文件和文件夹

    【[字符1字符2字符3]】匹配字符1到字符3的其中一个字符

    【[a-z]】表示匹配小写字母a到z的任意一个字符

    【[^123]】表示不匹配括号内的字符

     

    正则表达式

    匹配字符串,对于命令:grep、awk、sed

    基本支持标准的正则表达式

    特殊:

    【{n,m}】n到m次,需要加斜线

    Shell中无【()】、【+】、【?】

     

    特殊字符

    【‘内容’】单引号的内容仅仅表示字符串

    【“内容”】双引号的内容会解释特殊符号,如()转义、($)调用变量、(`)反引号等

    【`命令`】反引号,内容为引用的命令,可用【$(命令)】代替

    【#】表示注释当前行之后的内容

    【$变量】引用变量的值时

     

    变量

    变量的值全部以字符串保存

    【set】查看系统所有变量

    【unset 变量名】删除变量

     

    用户自定义变量

    本地变量,只在当前shell中生效

    声明:namex=”wo sh”

    调用:$namex

    追加:namex=“$namex”” dongxiaodong”  或者 namex=${namex}” dongxiaodong”

     

    环境变量

    父子shell的共享变量

    【pstree】查看当前所属shell位置

    通过ssh连接的客户端有3个,其中1是root,2是当前普通用户,3是另一个普通用户

    【export 变量名="初始值"】定义环境变量

    【bash】进入子shell,可直接访问环境变量,可用【exit】返回上一级

    【env】查看所有环境变量

    【unset 变量名】删除变量

     

    位置参数变量:

    【$n】n可为[0,9],超过时可用{ },${100}

     

    #!/bin/bash
    
    #接收第0个参数
    echo "当前程序为:$0"
    
    #接收第一个和第二个参数
    n1=$1
    n2=$2
    
    echo "结果为:"$(( $n1 * $n2 ))

    【$*】将输入的所有内容看出一个字符串,不包括$0

    【$@】把输入参数分开,相对于把$n内容存放在数组里,不包括$0

    【$#】查看输入参数的个数,不包括$0

     

    系统预定义变量:

    【$?】输出上一次命令是否正确执行,0为正确,其他为错误码

     

    键盘输入

    【read 选项 变量名】把输入的内容存入到变量中

    选项有:

    (-t) 等待输入时间

    (-n) 指定输入的字符个数,字符达到数量时会自动确定

    (-p) 输入提示信息

    (-s) 隐藏输入,如输入密码

     

    判断条件

    【[ -e 文件名 ]】判断文件是否存在

    【[ -d 目录名 ]】判断目录是否存在

    【[ -f  文件名 ]】判断是否为普通文件

     

    【[ 整数1 -eq 整数2]】判断相等,相等返回真

    【[ 整数1 -ne 整数2]】判断不相等

    【[ 整数1 -gt 整数2]】判断整数1是否大于整数2

    【[ 整数1 -lt 整数2]】判断整数1是否小于整数2

    【[ 整数1 -ge 整数2]】判断整数1是否大于等于整数2

    【[ 整数1 -le 整数2]】判断整数1是否小于等于整数2

     

    【[ -z 字符串 ]】判断字符串是否为空,空返回真

    【[ -n 字符串 ]】判断字符串是否非空,非空返真

    【[ 字符串1 == 字符串2 ]】判断字符串是否相等,相等为真

    【[ 字符串1 != 字符串2 ]】判断字符串是否不相等,不相等为真

    【[ 判断1 -a 判断2 ]】-a表示与,-o表示或,!表示取反

     

    Shell代码编程

    Shell脚本执行:【bash 脚本名】或者:【chmod 700 脚本名】【./脚本名】

    简单的 if 比较:

     1 #!/bin/bash
     2 
     3 if [ "3" == "2" ]
     4   then
     5       echo "输出:相等"
     6       #执行系统命令
     7       ls -lh
     8 
     9 elif [ 4 -eq 4 ]
    10   then
    11       echo "4等于4"
    12 else
    13       echo "输出:不相等"
    14       #执行系统命令
    15       pwd
    16 
    17 fi
    18 
    19 #退出shell,并修改 $? 的值为2
    20 exit 2

    简单的 case 编程:

     1 #!/bin/bash
     2 
     3 #键盘输入
     4 read -t 30 -p "entry:" nox
     5 case "$nox" in
     6    "1")
     7        echo "11111111111"
     8        ;;
     9     "2")
    10        echo "2222222222222"
    11        ;;
    12      *)
    13         echo "xxxxxxxxxxxxxxxx"
    14         ;;
    15 esac

    简单的 for 循环:

    1 #!/bin/bash
    2 
    3 for i in 1 2 5 5 8
    4    do 
    5      echo $i
    6    done

    or

    1 #!/bin/bash
    2 #1到100相加程序
    3 s=0
    4 for ((i= 1;i<=100;i=i+1))
    5   do
    6      s=$(($s+$i))
    7   done
    8 echo "1+2+3+........+100= $s"

    简单的while循环

    另外until循环的判断条件是假就继续循环

     1 #!/bin/bash
     2 
     3 i=1
     4 s=0
     5 while [ $i -le 100 ]
     6   do
     7     s=$(( $i+$s ))
     8     i=$(( $i+1))
     9   done
    10 echo "1+2+3+.....+100= $s"

     

     

  • 相关阅读:
    二叉树的创建、递归,非递归遍历
    一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)
    说走就走的旅行 ——一个人重游长安
    OpenCV笔记:pyrDown()函数和pryUp()函数的使用
    考研心得--一个差劲的ACMer
    HDU 3530 --- Subsequence 单调队列
    POJ 3494 Largest Submatrix of All 1’s 单调队列||单调栈
    极角排序详解:
    POJ 3268 Silver Cow Party 最短路—dijkstra算法的优化。
    给出 中序&后序 序列 建树;给出 先序&中序 序列 建树
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/10134818.html
Copyright © 2020-2023  润新知