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这个字符串,和单引号作用一致
#代表注释
- Shell基础学习小结
0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...
- Shell基础-环境变量配置文件
Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- 常用的shell命令整理
工作快一年了,shell命令也玩了一年了.还是有点积累的,下面是本人常用的. 1.pwd | xargs -i basename {} 获取当前所在目录的名称 2.ps -ef|grep -w ...
- shell基础(转)
shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法
这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...
- shell基础及变量
一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...
- Shell 基础教程
一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html
随机推荐
- c# 操作excel 替代方案
一直使用excel com 接口进行excel 操作,最近一次因为权限折腾了个够呛,果断放弃,使用 NPOI FileStream file = new FileStream(url, FileMod ...
- 【转】Android类动态加载技术
http://www.blogjava.net/zh-weir/archive/2011/10/29/362294.html Android应用开发在一般情况下,常规的开发方式和代码架构就能满足我们的 ...
- rocketmq总结
1:角色关系 2:顺序消息 消费消息的顺序要同収送消息的顺序一致,在 RocketMQ 中,主要挃的是尿部顺序,即一类消息为满足顺序性,必须 Producer 单线程顺序収送,丏収送到同一个队列,返样 ...
- liunx 套接字编程(Linux_C++)
网络中的进程是如何通信的? 在网络中进程之间进行通信的时候,那么每个通信的进程必须知道它要和哪个计算机上的哪个进程通信.否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行 ...
- string的+操作与StringBuilder对象
习惯在C#代码中写str+="xxx";这样代码的请注意啦,如果这种操作是针对单个变量作很多次叠加操作的,很有可能导致性能降低. 大家都知道string与StringBuilder ...
- [Aaronyang] 写给自己的WPF4.5 笔记22 [3d交互与动画 3/4]
OK,前面我们的3d模型都比较囧啊,最近也看了一点ZAM了解了一下,大致至少可以做个简单的模型用来演示. 1.交互,动起来的思路 ①修改Model3D对象的变换 ②修改应用于ModelVisual3D ...
- C# 个人常用代码积累
/// <summary> /// TextBox限制只能输入十六进制,且只能输入6个 /// </summary> /// <param name="send ...
- Delphi中设置条件断点
写了这么长时间的代码,一直认为调试程序比写程序要重要,上次有人问俺,如何调试一个循环中某个循环条件位置下断点.本来想来在Delphi的断点设置中应该是有一个类似条件断点的东西的,不过我也一直不知道怎么 ...
- npoi与memcached中的ICSharpCode.SharpZipLib版本冲突的解决方案
项目中一直使用NPOI与memcached,一直相安无事,但是最近升级了npoi到最新版本,发生了ICSharpCode.SharpZipLib的版本冲突问题. 因为此前一直使用的是NPOI的1.x的 ...
- 8个经典HTML5 3D动画赏析
HTML5技术已经越来越被我们所接受,特别是一些3D的动画特效.本文介绍的8个HTML5 3D动画并没有特别华丽的界面,但是比较实用,涉及到3D图片.3D图表.3D按钮等方面,一起来看看. 1.HTM ...