zoukankan      html  css  js  c++  java
  • Linux04__Shell

    一、Shell基础

    1.1 Shell概述

      Shell是一个命令行解释器,介于内核和程序之间。(硬件>内核>Shell命令解释器>外层应用程序);

      Shell是解释执行的脚本语言,主要分为B shell和C shell,现主要用的是B shell。

    1.2 Shell第一个脚本

    vi hello.sh
    ''''''
    #!/bin/bash
    echo "hello world"
    ''''''
    
    chmod 755 hello.sh
    ./hello.sh

    1.3 Bash基本功能

    #1 历史命令
    history
    !!  #重复执行上次的命令
    !111  #重复执行历史中第111条命令
    !vi  #重复执行历史中最后一条以vi开头的命令
    
    #2 命令别名
    alias ll='ls -l'
    •   bash快捷键

    •   输入输出重定向:

            

           

            

    •   多命令输入和管道符
    •  

        用法:./configure && make && make install

           ls /root/test && echo yes || echo no

      管道符:命令1的正确输出作为命令2的操作对象

       通配符 

    1.4 Bash变量:自定义变量、环境变量、位置参数变量、预定义变量

    #1 环境变量
    export <变量名=值>  #设置变量
    env  #查询变量
    unset <变量名>  #删除变量
    
    #PATH:系统查找命令的路径
    echo $PATH
    PATH="$PATH":/root/sh  #PATH变量叠加的方式来临时设置环境变量

    # 接收键盘输入 read [选项] [变量名]
    # 选项:
    -p "提示信息",-n 字符数:只接受指定的字符数后就自动执行了 # 演示位置参数 vi test.sh '''''' #!/bin/bash read -p "Input your age: " age echo "$1 age is ${age}" ''''''
    chmod 755 test.sh
    ./test.sh liming
    [root@localhost ~]# ls
    anaconda-ks.cfg  test.txt
    [root@localhost ~]# echo $?   #0表示上次命令执行正确
    0
    [root@localhost ~]# lss
    -bash: lss: 未找到命令
    [root@localhost ~]# echo $?
    127
    •  变量运算:推荐用“$((运算式))”或“$[运算式]”
    •  运算符:

     1.5 环境变量配置文件

    #系统默认环境变量配置文件有:
    
    #所有用户生效
    
    /etc/profile
    
    /etc/profile.d/*.sh
    
    /etc/bashrc
    
    #对应用户生效
    
    ~/.bash_profile
    
    ~/.bashrc

    source <配置文件>  #使配置文件生效
    
    . 配置文件  #同上
    
    set  #查询系统默认变量

    二、Shell编程

    2.1 正则和通配符

    • 正则是在文件中匹配符合条件的字符串,是包含匹配(grepawksed支持正则),类似python中re.search用法;
    • 通配符是匹配符合条件的文件名,是完全匹配(lsfindcp不支持正则,只能使用通配符进行匹配),类似python中re.march用法

     2.2 字符截取命令

    #1 cut <文件名>
    # 选项: -f 列号:提取第几列;-d 分隔符:按照指定分隔符分割符(默认为制表符)
    cut -f 2 test.txt
    cut -f 2,4 test.txt
    cut -d ":" -f 3 /etc/passwd
    #cut的短板:不能很好识别以空格分隔的内容,这种更适合用awk命令
    
    #插入一个命令:printf '输出类型 输出格式' <输出内容>
    #   输出类型: %ns:输出n个字符;  %ni:输出n个整数;  %m.nf:浮点数
    #  一般awk配合printf使用
    
    #2 awk '条件1 {动作1} 条件2 {动作2}' <文件名>
    awk '{FS=":"} {print $1 "	" $3}' /etc/passwd  # {FS=":"}指定分隔符;  第一行没有分割
    awk 'BEGIN{FS=":"} {print $1 "	" $3}' /etc/passwd  #BEGIN分割第一行
    
    #3 sed [选项] '动作' <文件名> #用来对数据选取、替换、删除、新增等操作
    # 选项: -n:只输出处理行; -e:允许输入数据应用多条SED命令; -i:直接修改数据文件
    # 动作: a追加,c行替换,i插入,d删除,p打印,s字符替换
    df -h | sed -n '2p' #只查看第二行
  • 相关阅读:
    大数据面经
    mysql复习(2)
    java容器
    内存管理
    垃圾收集
    输入/输出流
    排序算法的稳定性及其汇总
    java传值与传引用
    linux复习6
    linux复习5
  • 原文地址:https://www.cnblogs.com/koafan-zou/p/12292178.html
Copyright © 2011-2022 走看看