• linux/linux学习笔记-Shell基础(mooc)


    一。shell概述

    shell根据ascII表,将命令翻译为0101...传给内核执行。

    内核-》shell翻译为命令-》用户(操作的界面就是shell,shell=翻译官)

    linux标准shell是bash

    unix(C族)用的更多的是csh

    echo $SHELL  //$调用变量名  
    
    #/bin/bash
    
    vi /etc/shells
    
    $sh   //从bash->进入->sh
    
    #exit退出
    
    csh  //进入csh

    一个shell可以调用其他shell(如bash->调用sh)

    一个shell也可以调用子shell(如bash中->输入命令bash,该bash为子bash)

    工作示例:mysql映射

    //step1:创建mysq.sh
    vi mysql.sh
    
    //step2:添加内容
    #!/bin/bash
    
    docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=shiyufeng -d mysql:5.7
    
    //启动mysql 
    docker exec -it mysql bash

    二。脚本的执行方式

    三。Bash的基本功能

    1。命令的别名与快捷键

    2.历史命令

    3。输出重定向

    4.管道符

    5.通配符

    小结:

    #####bash的基本功能#######
    
    【别名与快捷键】
    
    alias  //查看系统中所有命令别名[alias 别名 原命令]
    
    ls --color=never   //取消颜色显示
    
    alias ls='ls --color=never' //设定命令别名-给命令ls --color=never取个别名ls
    
    vi filename  //vi无颜色,vim有颜色(比vi强大)
    alias vi='vim' //给vim起个别名叫vi,因此打vi,实际打vim
    
    #上述别名只能临时生效
    
    【别名永久生效】
    
    #每一个用户都有自己的环境变量
    vi ~/.bashrc  //写入环境变量配置文件(~代表家目录)
    
    source ~/.bashrc //生效(也可重启)
    
    unalias 别名 //删除别名
    
    【历史命令】
    
    #只能保存正常退出的命令
    history //查看所有历史命令[history [选项] [历史命令保存文件]]
    
    #手动保存历史命令
    history -w   //把缓存中的历史命令写入历史命令保存文件
    
    history -c  //清空历史命令(不建议清空)
    
    #修改历史命令条数
    vi /etc/profile  //查看历史命令保存条数:HISTSIZE=1000(可修改)
    
    #历史命令的调用
    history //查看历史,前显示序号
    !序号   //重复执行每“序号”命令
    !!     //重复执行上一条命令
    !字串  //重复执行最后一条以该字串开头的命令
    eg: history 命令
    ls -l  //第一条 
    ls -a  //第二条
    则! ls 执行的是ls -a这条命令
    
    
    【输出重定向】--常用
    
    #标准输入输出(输入:输入到PC,输出:从PC输出)
    
    #linux中一切皆文件
    /dev/stdin  //键盘(文件描述符0)
    /dev/sdtout //显示器(1:标准正确输出)
    /dev/sdterr //显示器(2:标准错误输出)
    
    #输出重定向:输出到屏幕的内容,输出到文件中,改变了输出方向,叫输出重定向
    
    #标准输出重定向(只能保存命令的正确输出)
    #只要有输出的命令,均可以重定向到文件(eg:ls..)
    ifconfig > test.log  //[命令 > 文件]  //覆盖方式添加
    cat test.log   //上述命令未显示在屏幕上,而是写入到test.log日志中
    
    ifconfig >> test.log //[命令 >> 文件] //追加
    
    #标准错误输出重定向(注意2与>间无空格)
    yufeng 2 > test.log //将yufeng这个错误命令输出到test.log文件[错误命令 2 >文件]
    
    yufeng 2 >> test.log //追加
    
    #***正确输出和错误输出同时保存--常用(记住)
    
    #方法一:覆盖方式(>)和追加命令(>>)
    ifconfig >> test.log 2>&1 //正确输出:[命令 > 文件 2>&1]
    yufeng >> test.log 2>&1   //错误输出
    
    #方法二:[命令 &>文件] / [命令 &>>文件]
    ls &>>test.log //正确输出
    yufeng &>>test.log //错误输出
    
    #若不想显示命令,可将命令输出到/dev/null
    ls &>/dev/null   // /dev/null黑洞,特殊设备,当作垃圾站
    
    #方法三:[命令 >> 文件1 2>>文件2]正确与错误日志分别保存
    cat xxx >> yes.log 2>>erro.log //把正确日志放到yes.log,错误日志放到erro.log
    
    
    【输入重定向】[wc [选项] [文件名]  --了解
    
    wc  //可以写入任意内容(统计人为输入)
    ctrl + d  //统计输入了多少字符
    
    wc -c //统计字节数
    
    #改变统计输入方法,不是键盘而是文件
    wc < test.log //统计文件输入的字符
    
    wc <<  string //任意输入,直到遇到string,统计string之前的所有字符
    
    【管道符】
    
    #多个命令顺序执行,命令间无逻辑关系
    date ; ls ; cd /etc ; ls ; pwd  //多个命令顺序执行(不管某一命令是否报错,后绪所有命令依旧正确执行)
    
    #逻辑与,多个命令顺序执行,命令间有逻辑关系
    ls && echo yes  //第一条命令必须正确执行,第2条命令才可以执行
    
    # ||逻辑或:命令1不正确执行,才执行命令2
    ls || ls -l  //命令ls不正确执行,才执行命令ls -l
    
    #判断ls是否正确执行
    ls && echo yes || echo no  //ls正确执行,会打印yes,否则打印no
    
    【管道符】
    
    #命令1 | 命令2  命令1的操作结果作为命令的2的操作对象
    
    ls -l  /etc/ > abc //先将ls -s结果输入到某一文件
    more abc //再查看该文件
    
    more test.log //分屏显示(more查看文件)
    
    ls -l /etc | more  //管道符,more查看ls命令的结果
    
    #查看linux的所有网络连接
    netstat -an   //查看linux所有网络连接
    
    #查看连接子多少人
    netstat -an | grep ESTABLISHED //在命令netstat -an中查询ESTABLISHED这个行
    
    #查看连接子多少人(统计行号)
    netstat -an | grep ESTABLISHED | wc -l
    
    【通配符】
    
    ls abc*  //查询包含abc的所有文件
    
    ls abc?  //查询abc后包含1个字符的文件
    
    ls abc[0-9] //查询abc后包含任意一个数字的所有文件
    
    ls abc[0-9][0-9]//查询abc后包含两个数字的所有文件
    
    ls abc[^0-9]  //查询abc后不是数字的所有文件
    
    ls abc[^0-9]* //查询abc后除数字外的所有文件
    
    ls abc[^0-9][a-z] //查询abc后是字母的所有文件
    
    #正则表达式
    
    echo ls //输出ls
    
    #单引号与双引号,$用于调用系统变量
    a=123 //赋予变量值
    echo $a //查看变量值123
    echo '$a' //原样输出
    echo "$a" //输出变量值123
    
    b=ls  //赋予b变量值ls命令
    echo "$b"  //输出ls,不是预期结果
    
    #反引号用于包含系统命令--少用
    c=`ls` //反引号,将ls命令赋值给c
    echo "$c" //会输出ls命令查询的结果
    
    #$()用于包含命令--常用
    d=$(ls) //<=>d=`ls`,将ls命令赋值给d
    
    #转义字符将特殊符号$失去意义
    echo $d //输出$d
  • 相关阅读:
    HDU-1275-两车追及或相遇问题(数学题目)
    hdu 2209 翻纸牌游戏
    HDU1217:Arbitrage(SPFA)
    HDU1548:A strange lift(Dijkstra或BFS)
    Hdu-2112 HDU Today (单源多点最短路——Dijsktra算法)
    HDU 3374 String Problem (KMP+最大最小表示)
    mysql导入的时候提示“1046-No Database selected”的解决办法
    win10开发环境下安装mongodb
    微服务项目开发学成在线_day01_CMS服务端开发
    springboot的http监控接口启动器的配置
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/9874794.html
Copyright © 2020-2023  润新知