shell学习第二弹-进阶
1.linux系统中配置文件执行顺序
1)用户登录系统,首页调用/etc/profile文件初始化所有bash用户的默认特征
2)然后shell依次查找~/.bash_profile,~/.bash_login,~/.profile,并执行它找到的首个文件中的命令;这些配置可以覆盖掉
上述中配置文件的内容
3) 通常可以在上述配置文件中添加一些用户配置,比如环境变量,定义一些函数,以及为一些常用命令重命名,非常方便
2.在当前shell中使用运行初始化文件
.号在bash下可以使配置文件快速生效。
eg:. ~/.bash_profile
source 命令通用
eg:source ~/.bash_profile,source /etc/profile
3.符号命令
3.1. $()命令
命令替换,可以使用该命令将一个命令的执行结果赋给一个变量
eg:
#!/bin/bash
#统计当前目录下有多少个文件
count=$(ls | wc -l)
echo "\$count $count"
3.2.(())
算术命令,()中要求包含=号
eg:
#!/bin/bash
n=2
m=3
((l=$m+$n)) #结果是5
p=$m+$n #结果是2+3
p=(($m+$n))#报异常
3.3.$(())
类似(())命令,但是要求()中不包含=号
#!/bin/bash
n=2
m=3
l=$(($m+$n)) #结果是5
3.4.[]
与test功能一样
4.重定向标准输出
4.1.文件描述符
文件描述符是程序发送输出和接收输入的地方。当运行一个程序的时候,会打开3个文件描述符。分别是:0(标准输入),1(标准输出),2(标准错误输出)
重定向输出符号>是1>的简写;类似的重定向输入符号<是0<的简写
4.2.复制文件描述符
&加上文件描述符
locktty > out 2> &1 #标准输出和标准错误输出都重定向到out文件
5.命令分隔和分组
5.1.使用;分隔命令
$ x;y;z;
5.2.使用\继续命令
当输入一个比较长到的命令时,光标已经达到屏幕右端,可以输入一个\换行
$ grep aaaaa | cut -d : -f 3 | cut -d ; -f \
$ | awk '{print $1}'
5.3.|和&符号功能
|管道符号,改变命令的输入和输出;
$ grep error out.log | cut -d ; -f 3
&使程序或者命令在后台执行,使用户可以继续进行当前的工作
$ cal.sh &
6.作业控制
6.1. jobs列出作业
6.2. fg将作业移到前台执行
$ fg n #n是作业编号
6.3. bg将作业移到后台执行
将某个作业移到后台执行,必须先按下CTRL+Z键将作业挂起。然后再使用bg命令将作业在后台执行

7.操作目录栈
目录栈是用栈的形式来存放目录(FILO)
7.1. dirs显示目录栈
7.2. pushd命令使用
将目录压栈,并且使当前目录切换到要入栈的目录
$ pushd /home/my
~ /home/my
$ pwd #显示/home/my目录
输入pushd命令,可使当前路径在栈顶的两个目录之间进行切换
pushd +n #n是要切换到的目录相对于栈顶位置的偏移(栈顶位置是0)
pushd +3 #切换到距离栈顶3个位置的目录
7.3. popd命令使用
使目录弹出栈,不在栈中保存。用法类似于pushd
8.参数和变量
8.1.变量分类
8.1.1 用户变量
$ name=minmin
$ echo $name #显示minmin
使用unset删除用户变量
$ unset name
8.1.2 关键字变量即系统变量
HOME:用户主目录
~:用户主目录
PATH:shell查找程序执行的路径
MAIL:保存邮件的地方
IFS:分隔输入字段
指定了在命令行中用来分隔参数的字符,其默认值为空格,制表符和换行符。但无论IFS的值是什么,用户总是可以使用空格符和制表符来分隔参数
当为IFS指派字符值得时候,这些字符值也可以作为分隔字段,但是只有在进行展开的时候才可以这样
eg:
PS1:用户主提示符

\u 当前用户名
\h 主机名,不包括域名
\H 主机名,包括域名
\w 工作目录的路径名
\W 工作目录的基名
\! 当前事件编号
\d 按照工作日/月/日期格式显示的日期
\@ 按照12小时制,AM/PM的格式显示当前时间
\T 按照12小时制,HH:MM:SS的格式显示当前时间
\A 按照24小时制,HH:MM的格式显示当前时间
\t 按照24小时制,HH:MM:SS的格式显示当前时间
PS2:用户次提示符

PS3:菜单提示符
PS3保存了用于select控制结构的菜单提示符
PS4:调试提示符
bash -x 开启调试模式
PS4保存了程序调试时提示符
8.1.3. 位置参数跟变量
有一组参数的名字看起来不像变量,其中大多数参数的名字都是由一个字符组成,比如1,?,#,并且像其他变量一样,使用美元符号进行访问$1,$?,$#。
详细内容在第三弹中展开
8.2. 变量属性
8.2.1. readonly使变量只读
$ readonly name=minmin
$ name=lily
bash: name : readonly variable
当不带任何参数使用readonly命令时,会显示所有只读变量列表
8.3. declare和typeset:为变量赋予属性
这两个命令是同一个命令的两个名字,可用设置shell变量的属性和值,属性列表如下
-a 声明一个数组变量(array)
-f 声明一个函数变量(function)
-i 声明一个整形变量(integer)
-r 声明一个只读变量(readonly)
-x 声明一个全局变量(export)
9.命令历史机制,这里只介绍history命令,fc命令不在此介绍
9.1. 首先介绍三个系统变量
HISTSIZE 会话期间保存的历史命令的条数
即在用户登录之后,保存用户最近执行命令条数。默认值为500
HISTFILESIZE 会话之间保存的历史命令的条数
即在用户注销会话之后,再次登录会话时,保存的上次登录时最近执行命令的条数。默认值为500
HISTFILE 历史文件的位置
执行history命令时显示HISTSIZE条命令
9.2. 常用快捷键
!!执行前一次的命令
!#执行当前命令
!n 执行历史编号为n的命令
!-n往前第n条命令
!string执行最近以string开头的命令
!?string[?]包含string的最近命令行,最后的?是可选的
!{event} event为一个事件标志符;花括号将event与左右的文本分隔开,比如!{-3}3表示后面紧跟着3的第三个最近执行的命令
10.命令执行顺序
10.1 &&
command1 && command2 只有当command1执行成功的时候(即命令结果返回1)才会执行command2
10.2 ||
command2 || command2 只有当command1执行失败的时候(即命令结果返回0)才会执行command2
10.3 ()
如果想执行多个命令,则需要使用命令分隔符对命令进行分割,然后用括号括起来
(command1;command2;command3)
shell学习第二弹-进阶的更多相关文章
- 前端学习 第二弹: JavaScript中的一些函数与对象(1)
前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...
- Python3 学习第二弹: 字符串String
字符串表示问题 常见用法 '' 与 "" 就不提了 一些特殊用法 三引号:接收多行字符串的输入 >>>print('''Oh my God!''') Oh my ...
- Java高精度学习第二弹——求N!
继续学习Java高精度,今天写的是求N!. 首先附上源代码: import java.util.Scanner; import java.math.BigInteger; public class M ...
- ActiveMQ 学习第二弹
经历了昨天的初识 ActiveMQ,正好今天下班有点事耽搁了还没法回家,那就再学习会 ActiveMQ 吧!现在官网的文档没啥好看的了,毕竟是入门学习,太深奥的东西也理解不了.然后看官网上有推荐书籍& ...
- shell学习第一弹-初识
1.shell简介: shell是系统的用户界面,提供了用户与内核进行交互的一种接口.可以看做是用户与内核之间的一扇窗户.它接收用户输入的命令并把它送入内核执行. 常见的有bash,tcsh,csh, ...
- Vue-Router学习第二弹动态路由\懒加载\嵌套路由
在我们做项目时肯定会有出现动态路由: 举个栗子: 一个品种的商品页面会有同类不同样的商品就要在路由的后面加一个id: Vue的路由id是这样添加的: 两种动态路由 一种是params参数添加: 首先现 ...
- cookbook学习第二弹
1.5怎样实现一个按优先级排序的队列?并且在这个队列上面每次pop操作总是返回优先级最高的那个元素 带有双下划线的方法,会在需要被调用的位置自动被调用 带有单下划线的变量是私有变量 下面利用类heap ...
- css学习の第二弹—文字格式化排版
1.css格式化排版 >>字体设计: etc:body{font-family:"Microsoft Yahei";} >>字号,颜色: etc:body{ ...
- html学习第二弹の表格的使用方法
>创建表格的四个元素: table.tbody.tr.th.td 1.<table>-</table>:整个表格以<table>标记开始.</table ...
随机推荐
- laravel中ubuntu下执行php artisan migrate总是报错
ubuntu14.0 + xampp + laravel5下 laravel中ubuntu下执行php artisan migrate总是报错: [PDOException] could not fi ...
- [POI2010] Intelligence test
yyl说是用链表O(n)做 但是并脑补不出来. 发现可以用个vector记录一下每个数出现的位置,然后对于每个新序列就二分一下,找下一个数出现的离当前位置最近的位置,更新一下当前位置即可. 时间复杂度 ...
- 50.常用的query查询方式
主要知识点 match all match multi match range query term query terms query exist query 1.match all ...
- 怎么样调整FreeBSD时区问题
一般我们在安装系统的时候,都会遇到服务器时间不同步的情况.所以必须得设置为中国时区,比较简单的方法,就总结如下几点: 1.通过命令行启动图形界面更改 #sysinstall 请选择 configure ...
- 项目PMO工作
算起来.这是第一次以项目PMO人员的身份參与项目,尽管非常可惜没有从头參与,也没有參与到项目结束,仅仅有短短的两个月.但对项目PMO也可略窥一斑.如今就当个流水账写一写吧. 进项目组的时候,是中 ...
- luogu2618 数字工程 DP
题目大意:ACM实验室开启了一个数字工程项目,希望把正整数n通过一些特殊方法变成1.可采用的方法有:(1)减去1:(2)除以它的任意一个素因子. 每操作一次消耗一个单位的能量.问,把n变成1最少需要消 ...
- POJ3463 Sightseeing
题目大意:求两点间最短路与长度为最短路长度+1的路径的条数之和. 方法1:最短路径+DP 首先求出ST间最短路径,然后根据递归式记忆化搜索(因此还要构造反向图). 我们知道到达终点的路径长度最长为ma ...
- POJ3349 Language: Snowflake Snow Snowflakes
POJ3349 Language: Snowflake Snow Snowflakes 题目:传送门 题解: 链表+hash的一道水题 填个坑补个漏... 代码: #include<cstdio ...
- 【HDU 1847】 Good Luck in CET-4 Everybody!
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=1847 [算法] 我们知道,每一种状态,要么必胜,要么必败 记忆化搜索即可 [代码] #includ ...
- struts的工作流程
- 一个请求过来,走前端控制器StrutsPrepareAndExecuteFilter -前端控制器是一个过滤器,过滤器中的核心方法是doFilter(),doFilter方法中首先处 ...