• Shell基础


    Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell启动、挂起、停止甚至编写一些程序。
    Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,再shell中可以直接调用Linux系统命令。

    Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括:sh、ksh、Bash、psh、zsh;c家族主要包括:csh、tcsh

    Bash:Bash与sh兼容,现在的Linux使用bash作为用户的基本shell

    Linux支持的Shell

    /etc/shells

    脚本执行方式

    1、echo输出命令

    echo [选项] [输出内容]
    选项:
        -e: 支持反斜线控制的字符转换
    
    echo -e "hello"
    #删除左侧字符
    
    echo -e "h	e	l
    l	o"
    #制表符与换行符
    
    echo -e "x68	x65	x6c
    x6c	x6f"
    #按照十六进制ASCII码输出
    
    echo -e "e[1;31m text e[0m"
    #输出颜色
    #30m=黑色, 31m=红色, 32m=绿色, 33m=黄色, 34m=蓝色, 35m=洋红, 36m=青色, 37m=白色

    2、第一个脚本

    vi hello.sh
    #!/bin/bash
    #The first program

    3、脚本执行

    赋予执行权限,直接运行
    chmod 755 hello.sh
    ./hello.sh
    
    通过Bash调用执行脚本
    bash hello.sh    

    Bash的基本功能

    1、命令别名与快捷键
    2、历史命令
    3、输出重定向
    4、多命令顺序执行
    5、Shell中特殊符号

    查看与设定别名

    alias
    #查看系统中所有的命令别名
    
    alias 别名='原命令'
    #设定命令别名

    别名永久生效与删除别名

    vi ~/.bashrc
    #写入环境变量配置文件
    
    unalias 别名
    #删除别名
    
    source .bashrc
    #马上生效

    命令生效顺序

    第一顺位执行用绝对路径或相对路径执行的命令
    第二顺位执行别名
    第三顺位执行Bash的内部命令
    第四顺位执行按照$PATH环境变量定义的目录查找顺序找到
    第一个命令

    常用快捷键

    Ctrl+C 强制终止当前命令
    Ctrl+L 清屏
    Ctrl+A 光标移动到命令行首
    Ctrl+E 光标移动到命令行尾
    Ctrl+U 从光标所在位置删除到行首
    Ctrl+Z 把命令放入后台
    Ctrl+R 在历史命令中搜索

    历史命令

    history [选项] [历史命令保存文件]
    选项:
        -c: 清空历史命令
        -w: 把缓存中的历史命令写入历史命令保存文件~/.bash_history

    历史命令默认保存1000条,可以在环境变量配置文件/etc/profil中进行修改

    历史命令的调用
    使用上、下箭头调用以前的历史命令
    使用”!n”重复执行第n条历史命令
    使用”!!”重复执行上一条命令
    使用”!字串”重复执行最后一条以该字串开头的命令

    输出重定向

    输入重定向

    wc [选项][文件名]
    选项:
     -c:     统计字节数
     -w: 统计单词数
     -l: 统计行数

    管道符

    1、多命令顺序执行

    ls anaconda-ks.cfg && echo yes    #逻辑与
    
    ls anaconda-ks.cfg || echo no    #逻辑或
    
    命令 && echo yes || echo no    #命令判断

    2/管道符

    命令格式:
        命令1 | 命令2
        #命令1的正确输出作为命令2的操作对象
    
    ll -a /etc/ | more
    netstat -an | grep "    ESTABLISHED"

    通配符

    Bash中其他特殊符号

    echo 'ls'
    echo $(date)

    条件判断语句

    按文件类型判断

    两种判断格式

    test -e /root/install.log
    [ -e /root/install.log ]    #推荐格式,注意括号两边空格
    
    [ -d /root ] && echo "yes" || echo "no"
    #第一个判断命令如果正确执行,则打印“yes”,否则打印“no”

    按文件权限判断

    [ -w student.txt ] && echo "yes" || echo "no"
    #判断文件是拥有写权限的

    比较两个文件

    [ /root/student.txt -ef /tmp/stu.txt ] && echo "yes" || echo "no"

    比较两个整数

    [ 23 -ge 22 ] && echo "yes" || echo "no"

    字符串判断

    [ -z "$name" ] && echo "yes" || echo "no"
    #判断name变量是否为空
    
    [ "$aa" == "bb" ] && echo "yes" || echo "no"
    #判断两个变量的值是否相等

    多重条件判断

    [ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
    #判断变量aa是否有值,同时判断变量aa是否大于23

    单分支if语句

    if [ 条件判断式 ]; then
        程序
    fi
    或者
    if [ 条件判断式 ]
        then
        程序
    fi

    if语句使用fi结尾,[ 条件判断式 ]即是使用test命令判断,中括号和条件判断式之间必须有空格。

    例1:判断登录的用户是否root

    #!/bin/bash
    test  = $(env | grep "USER" | cut -d "=" -f 2)
    
    if [ "$test" == "root" ]
        then
        echo "Current user is root."
    fi

    例2:判断分区使用率

    #!/bin/bash
    #统计根分区使用率
    rate=$(df -h | grep "/dev/sda3" | awk ' {print $5} ' | cut -d "%" -f1)
    #把根分区使用率作为变量值赋予变量rate
    
    if [ $rate -ge 80 ]
        then
            echo "Warning! /dev/sda3 is full!"
    fi

    双分支if语句

    判断Apache服务是否启动

    ps aux | grep httpd | grep -v grep
    
    #!/bin/bash
    
    test=$(ps aux | grep httpd | grep -v grep)
    #截取http进程,并把结果赋给变量test
    if [ -n "$test" ]
    #如果test的值不为空,则执行then中命令
    then     
        echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
    else
        /etc/rc.d/init.d/httpd start &>/dev/null
        echo "$(date) restart httpd!" >> /tmp/autostart-err.log
    fi 

    Copyright © 吴华锦
    雅致寓于高阁渔舟唱晚,古典悠然
    格调外发园林绿树萦绕,馥郁清香
  • 相关阅读:
    BZOJ 1911: [Apio2010]特别行动队 斜率优化dp
    BZOJ 2751: [HAOI2012]容易题(easy) 数学
    Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) B. Guess the Permutation 水题
    Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) A. Slime Combining 水题
    BZOJ 2768: [JLOI2010]冠军调查 最小割
    BZOJ 1497: [NOI2006]最大获利 最小割
    Codeforces Round #140 (Div. 1) D. The table 构造
    ICPC-CAMP day1 D.Around the world
    Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法
    BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
  • 原文地址:https://www.cnblogs.com/hanqing/p/5479491.html
Copyright © 2020-2023  润新知