一、shell概述

1.Shell是什么

shell是一个命令行解释器,他为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序

shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。shell是解释执行的脚本语言,在shell中可以直接调用linux系统命令

2.Shell分类

1)Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh

2)C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言非常类似,所以叫C Shell

Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash(linux中的标准shell)、psh、zsh;C 家族主要包括:csh(unix中主要使用的shell)、tcsh

TIP:可以使用命令:echo ¥SHELL来输出当前系统使用的是什么shell

3)Bash:Bash与sh兼容,现在使用的linux就是使用Bash作为用户的基本Shell

3.Linux支持的Shell

二、脚本执行方式

1.echo输出命令

echo [选项] [输出内容]

选项:

-e:支持反斜线控制的字符转换

控制字符

说明

\a 输出警告音
\b 退格键,也就是向左删除键
\n 换行符
\r 回车键
\t 制表符,也就是Tab键
\V 垂直制表符
\0nnn 按照八进制ASCII码输出字符。其中0为数字零,nnn是三位八进制数
\xhh 按照十六进制ASCII码输出字符。其中hh是两位十六进制数

[root@localhost ~]# echo -e "\e[1;31m你好\e[0m"

#使用红色字体输出你好

#30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=粉红,36m=青色,37m=白色

上面这行示例代码中\e代表颜色,[1代表开启眼色,31m代表我要使用红色,\e[0m代表关闭颜色

2.第一个脚本

1)使用命令“vi hello.sh”创建一个脚本

2)文本中输入:”#!bin/bash”(做一个声明)

3)正文输入:echo –e “Hello World!”,然后保存退出

3.脚本执行

1)赋予执行权限,直接运行

chmod 755 hello.sh

./hello.ssh

2)通过Bash调用执行脚本

bash hello.sh

三、bash的基本功能

1.命令别名与快捷键

alias

#查看系统中所有的命令别名

alias 别名=’原命令’

#设定命令别名(需要注意的是只是用命令行增加别名的话只是临时使用,相当于windows当中的临时环境变量)

1)别名永久生效

vi ~/.bashrc

#写入环境变量配置文件(需要注意的是写入后是重启设备后才会生效,如果需要直接生效需要再加一条命令source .bashrc相当于更新一下那么就可以直接生效了)

2)删除别名

unalias 别名

#删除别名(只是删除临时别名)

3)命令生效顺序

第一顺位执行用绝对路径或相对路径执行的命令

第二顺位执行别名

第三顺位执行bash的内部命令

第四顺位执行按照¥PATH环境变量定义的目录查找顺序找到的第一个命令

4)常用快捷键

ctrl+c 强制终止当前命令
ctrl+l 清屏
ctrl+a 光标移动到命令行首部
ctrl+e 光标移动到命令行尾部
ctrl+u 从光标所在位置删除到行首
ctrl+z 把命令放入后
ctrl+r 在历史命令中搜索

2.历史命令

1)历史命令

history [选项] [历史命令保存文件]

选项:

-c:清空历史命令

-w:把缓存中的历史命令写入历史命令保存文件”~/.bash_history”

history看到的是所有历史命令,.bash_history中的历史命令是系统退出时候自动写入的。

需要注意的是历史命令会默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改

2)历史命令的调用

使用上下箭头调用以前的历史命令

使用”!n”重复执行第n条历史命令

使用”!!”重复执行上一条命令

使用”!字符串”重复执行最后一条以该字符串开头的命令

3)命令与文件补全

在bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按下Tab键就会进行自动补全

3.输出重定向

1)标准输入输出

设备

设备文件名

文件描述符

类型

键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

2)输出重定向

类型

符号

作用

标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中
命令 >> 文件 以追加的方式,把命令的正确输出输出到指定的文件或设备当中
标准错误输出重定向 错误命令 2>文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中
错误命令 2>>文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中

标准输出重定向将命令的结果保存在文件中(只要命令的结果有输出就会保存)

错误输出重定向(注意符号两边没有空格

类型

符号

作用

正确输出和错误输出同时保存

(注意区分是否存在空格)

命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
命令 >> 文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
命令 &>文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到用一个文件当中
命令>>文件1 2 >>文件2 把正确的输出追加到文件1中,把错误的追加到文件2中

ls &>/dev/null只执行命令,不保存也不显示运行结果,/dev/null可以当作是垃圾回收站

命令 >> 文件 2>&1

以追加的方式把正确输出和错误输出都保存到同一个文件中去1

命令 &>>文件

以追加的方式把正确输出和错误输出都保存到同一个文件中去2

命令>>文件1 2 >>文件2

把正确的输出追加到文件1中,把错误的追加到文件2中

3)输入重定向

wc [选项] [文件名]

ctrl+d退出

选项 说明
-c 统计字节数
-w 统计单词数
-l 统计行数

使用wc统计文件行数、单词数、和字节数,也可以不用中间的那个<符号也可以统计

4.管道符

1)多命令顺序执行

多命令执行符

格式

作用

;
这是一个分号
命令1 ; 命令2 多个命令顺序执行,命令之间没有任何逻辑联系
&& 命令1 && 命令2 逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行
|| 命令1 || 命令2 逻辑或
当命令1执行不正确,则命令2才会执行
当命令1执行正确,则命令2不会执行

多个命令顺序执行

逻辑与

逻辑或

TIP:可以通过类似:ls && echo yes || echo no这样的方式来判断命令是否有误

2)管道符

命令1 | 命令2

#命令1的正确输出作为命令2的操作对象

例如:

ls –l  /etc | more来分屏查看命令执行结果

netstat –an | grep ESTABLISHED来监听我的服务器使用情况

netstat –an | grep ESTABLISHED | wc –l 来查看有多少人在使用我们的服务器

5.通配符

1)通配符

通配符

作用

? 匹配一个任意字符
* 匹配0个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符,例如[abc]代表一定匹配一个字符,或者a或者b或者c
[-] 匹配括号中任意一个字符,-代表一个范围,例如[a-z]代表匹配一个小写字母
[^] 逻辑非,表示匹配不是括号内的一个字符,例如:[^0-9]代表匹配一个不是数字的字符

例如:

ls test* 列出test开头的所有文件

主要匹配文件名或者目录

2)Bash中其他特殊符号

符号

作用

‘’ 单引号。在单引号中所有的特殊符号,如$和`都没有特殊含义
“” 双引号。在双引号中的特殊符号都没有特殊含义,但是$、`和\是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义
`` 反引号。反引号括起来的内容是系统命令,在bash中会先执行他。和$()作用一样。不过推荐使用$(),因为反引号非常容易看错
$() 和反引号作用一样,用来引用系统命令
# 在shell脚本中,#开头的代行注释
$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值
\ 转义符,在跟\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出$符号,而不当作是变量引用

十、Shell基础的更多相关文章

  1. shell基础二十篇 一些笔记

    shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...

  2. shell基础(转)

    shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...

  3. 十大基础排序算法[java源码+动静双图解析+性能分析]

    一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...

  4. Shell基础学习小结

    0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...

  5. Shell基础-环境变量配置文件

    Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...

  6. Linux实战教学笔记17:精简shell基础

    第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...

  7. shell基础及变量

    一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...

  8. Shell 基础教程

    一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html

  9. Linux基础学习(10)--Shell基础

    第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...

  10. Linux Shell基础(下)

    Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...

随机推荐

  1. HTML基础学习总结

    一.HTML的一些基本描述 全称:Hyper Text Markup Language 定义:超文本标记语言,是标记语言而不是编程语言,使用标记标签来描述网页,所以也被称为网页 格式:标签对里面放纯文 ...

  2. fcn模型训练及测试

    1.模型下载 1)下载新版caffe: https://github.com/BVLC/caffe 2)下载fcn代码: https://github.com/shelhamer/fcn.berkel ...

  3. dsdsd

    #include<iostream> using namespace std; #include<string.h> #define max 205 char map[max] ...

  4. Apache优化之多路处理模块理解

    前言: 当项目被多人访问时导致访问数度变慢,查了许多资料,了解到Apache的核心模块——MPM(多路处理访问模块).在此对MPM的一些知识点进行整理. MPM_WINNT模块 windows系统使用 ...

  5. node下的跨域传递cookie

    研究背景: 最近有一位朋友找工作,需要面试,涉及到面试就涉及面试题,于是我想起来鄙人之前面试被问到的一个跨域传递cookie的问题.搜索了相关资料,但自己不敲一下肯定是不足以让人信服的. 我用node ...

  6. WindowsXP开机就打开数字小键盘的几种方法

    很多人WindowsXP登陆界面输入密码时,都要使用数字键盘,可是很多时候下都会出现小键盘灯不亮情况,非要每次都按一 下才行,是不是很麻烦呢?下面就把全面的解决方法告诉大家. 用户名和密码时,不要输入 ...

  7. lr基本的概念

    并发用户数量:与服务器进行交互的在线用户数量   请求响应时间:从client端发出请求到得到响应的整个时间,它一般包括网络相应时间+server的响应时间   事务请求响应时间:完成这个事务所用的时 ...

  8. QT源码解析(七)Qt创建窗体的过程,作者“ tingsking18 ”(真正的创建QPushButton是在show()方法中,show()方法又调用了setVisible方法)

    前言:分析Qt的代码也有一段时间了,以前在进行QT源码解析的时候总是使用ue,一个函数名在QTDIR/src目录下反复的查找,然后分析函数之间的调用关系,效率实在是太低了,最近总结出一个更简便的方法, ...

  9. Android 目录结构

    Android目录结构中,values目录下对应的是应用程序所需要的数据,网上看到了一个包含values-v11等values-*的写法. 是为了进行分辨率的自适应????????? 因为还没有涉及到 ...

  10. 微信小程序组件 自定义多选

    <view class='back'></view> <view class="container"> <!-- 睡眠记录 --> ...