当前位置: 首页 > news >正文

Shell基础整理

  Shell的作用是将用户输入的文本命令转换成内核能识别的数据指令交给内核进行执行,内核需要翻译成二进制交由CPU底层来执行
    用户层->Shell->调用对应应用程序->kernel->硬件层->运算和周边外设->传递给kernal->应用程序->shell->用户
    Shell就是底层命令解释器,Shell就是用户界面
    Shell有两种语法: Bourne和C
    Bourne家族包括:sh、ksh、Bash、psh、zsh
    C家族包括:csh、tcsh(主要应用于Unix)
    Bash是当前Linux系统的标准shell
    echo $SHELL可以查看到shell对应的位置是:bin/bash
    支持的shell在/etc/shells文件下
    可以分级调用进入多个shell
 
    输出命令:
    echo "Hello World"会在命令行返回命令
    echo -e "H\te\tl\nl\to"
    -e指定识别转义字符,\t tab键 \n 换行
    输出彩色打印:
    echo -e "\e[1;31m hello world \e[0m"
    \e[1;和\e[0m是固定格式,代表开启颜色和关闭颜色,如果不关闭后续命令行全部是指定颜色,中间部分指定颜色和内容
    30m黑色,31m 红色, 32m 绿色, 33m 黄色,34m蓝色,35m洋红,36m青色,37m白色
 
    第一个shell脚本编写:
    建立脚本:vim hello.sh
    输入:
    #!bin/bash
    # The first shell program
    echo -e "\e[1;34m Hello Shell \e[0m"
    :wq保存脚本
    赋予可执行权限:chmod 755 hello.sh
    执行:./hello.sh(常用方法)
    或者直接调用:bash hello.sh
 
    shello别名是为了简化命令执行
    alias 查看当前shell的默认别名,系统默认添加了一些常用必要参数
    设置别名,比如:alias ls='ls --color=never'这样默认就添加了别名的参数,简化了命令输入
    比如:alias vi='vim'
    别名为了方便用户习惯
    alias命令设置的别名,当重新启动操作系统后设置会失效
    不重启的情况下取消别名设置:unalias vi='vim'
    永久修改,修改对应存放别名的环境变量:vim ~/.bashrc
    保存后立即生效:source ~/.bashrc
    
    命令执行优先级:绝对或者相对路径执行命令 > 别名 > Bash内部命令 > 环境变量定义的顺序查找的第一个命令
    shell常用快捷键:
    强制终止程序 Ctrl+c
    清屏 Ctrl+l
    删除光标到行首的命令:Ctrl+u
    光标定位到行首:Ctrl+a
    光标定位到行尾:Ctrl+e
    把前台执行的命令放到后台:Ctrl+z
    在历史命令中搜索:Ctrl+r 按快捷键后,输入命令,根据搜索结果回车执行
 
    查看所有的历史输入命令:history
    清除历史输入命令:history -c
    历史命令存放位置:~/.bash_history
    文件中存放的命令比history查询到的少一些,因为在用户退出时文件才会更新
    立即同步当前命令到~/.bash_history:history -w
    建立不要随便删除历史命令,便于排错和检查入侵
    history命令最多保存1000条,可以编辑/etc/profile修改HISTSIZE的属性值即可
 
    上下箭头执行历史命令
    history查询编号使用!n执行历史中的编号为n的命令,!!执行上一条命令,!字符串重复执行以该字符串开头的最后一条命令
 
    TAB键执行命令和目录和文件补全,补全数据依赖于环境变量和操作路径
 
 
 
    标准输入:/dev/stdin 文件描述符:0 设备:键盘
    标准输出:/dev/stdout 文件描述符:1 设备:显示器
    标准错误输出:/dev/stderr 文件描述符:2 设备:显示器
    其实都是软链接,链接到实时硬件内存目录/proc
 
 
    标准输出重定向:命令 > 文件 把正确命令输入覆盖到文件中,命令 >> 文件 内容追加
    标准错误输出重定向:命令 2> 文件,命令 2>>文件 作用同上,注意2后面不要加空格
 
    正确和错误同时输出到文件:命令 > 文件 2>&1 或者 命令 >> 文件 2>&1
    或者使用:命令 &> 文件 和 命令 &>> 文件
    分开文件写:命令 >> 文件1 2>>文件2 将正确结果放到文件1,错误结果放到文件2
 
    命令 &>/dev/null 命令不输出任何一种执行结果,/dev/null相当于Linux下的黑洞,输出就不存在了
 
    输入重定向 wc
    然后输入文本按Ctrl+d结束
    shell会返回统计行数,单词数和字符数
    wc -c 只统计字符数包括空格和换行
    wc -w 只统计单词数
    wc -l 只统计行数
 
    wc < success.log 或者 wc server.log   统计文件中的数据
    命令 < 文件 把文件内容交给命令执行
    wc << ddd
    输入文本输入到ddd后输入就结束了,返回统计,ddd就是自定义结束标识符
 
    多命令顺序执行:
    命令1 ; 命令2  多个命令顺序执行,命令之间没有任何逻辑关系
    命令1 && 命令2 逻辑与当命令1执行正确命令2才会执行
    命令1 || 命令2 逻辑或当命令1执行不正确,命令2会执行;当命令1正确执行,命令2不会执行
 
    统计某个操作脚本执行时间:date ; 命令 ; date
    data +%s 显示当前Unix时间戳,便于统计
    返回简单的正确或者错误提示:命令 && echo "yes" || echo "no"
 
    管道符:命令1 | 命令2
    命令1的输出结果作为命令2的操作对象;如果命令1执行错误,命令2不会被执行
    比如:ls -l /etc/ | more 实现分屏显示
    命令2一定能严格操作命令1的输出,不能随便使用
    比如:netstat -an | grep ESTABLISHED | wc -l 处理命令结果中的指定数据,统计一些结果等
 
 
    通配符:* 匹配一个或多个 ? 匹配1个 [abc]匹配abc中的1个 [a-z] [0-9]匹配a-z中的任何一个字母和0-9中的任何一个数字 [^0-9]匹配不是数字的的字符
 
    特殊符号:
    比如:aa=123 #定义变量
    echo $aa 这样可以输出变量值
    echo '$aa' 输出就是$aa这个字符串
    echo "$aa" 输出就是$aa的变量值
    单引号中''所有特殊符号都原样输出 双引号中,$ ` \都有特殊含义
    比如:aa=`ls`是把ls执行结果存放到变量aa中,使用反引号可以执行系统命令
    aa=$(ls)和上面作用一致,建议使用
    \$单纯代表$这个字符,比如:echo \$aa就输出$aa这个字符串,和单引号作用一致
    #代表注释

转载于:https://www.cnblogs.com/wxisme/p/5198724.html

相关文章:

  • LAMP架构搭建与优化(2.5-2.7)
  • PHP MySQL Where 子句 之Where
  • 动态规划(DP),模拟
  • dns服务器在做nslookup测试的时候,出现dns timeout 2 seconds的错误解释
  • 性能调优之访问日志IO性能优化
  • 老李分享:如何搭建千万级别用户的应用系统 3
  • hibernate缓存机制及配置
  • 独立制作人
  • 一分钟了解阿里云产品:批量计算五大热点技术问题分析
  • 发表学术论文必须做的十件事(下)(转)
  • Oracle Help Center
  • WebService的初级学习
  • ZOJ1372 POJ 1287 Networking 网络设计 Kruskal算法
  • UVA 10689 Yet another Number Sequence
  • Web 服务器基准测试,nginx+php vs Apache+php
  • python3.6+scrapy+mysql 爬虫实战
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • C++类的相互关联
  • C++入门教程(10):for 语句
  • chrome扩展demo1-小时钟
  • Cookie 在前端中的实践
  • ESLint简单操作
  • golang中接口赋值与方法集
  • Gradle 5.0 正式版发布
  • HTTP 简介
  • JavaScript-Array类型
  • Java精华积累:初学者都应该搞懂的问题
  • JS变量作用域
  • JS题目及答案整理
  • Mithril.js 入门介绍
  • nodejs调试方法
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue2.0项目引入element-ui
  • vue--为什么data属性必须是一个函数
  • 浏览器缓存机制分析
  • 码农张的Bug人生 - 见面之礼
  • 如何在 Tornado 中实现 Middleware
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (汇总)os模块以及shutil模块对文件的操作
  • (蓝桥杯每日一题)love
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)我也是一只IT小小鸟
  • .Net - 类的介绍
  • .NET Standard 的管理策略
  • .NET项目中存在多个web.config文件时的加载顺序
  • ??eclipse的安装配置问题!??
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [<事务专题>]