Linux基础系列-Day8
Shell编程基础
Shell介绍
Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于windows下的的cmd.exe。它接收用户命令,然后调用相应的应用程序,shell可以使命令行也就可以是图形界面,用来提供人机交互。
通配符
通配符可以理解为shell的特殊代号字符,通配符就是一类特殊符号的集合,在shell解释器中有特殊的含义。
通配符字符含义说明:
~ 表示用户家目录
[root@linux-test etc]# pwd
/etc
[root@linux-test etc]# cd ~
[root@linux-test ~]# pwd
/root
``和$() 被``和()裹起来的命令先执行
[root@linux-test ~]# echo `ls`
anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos
[root@linux-test ~]# echo $(ls)
anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos
[root@linux-test ~]# echo ls
ls
!历史 可以调用历史命令,也表示逻辑非(下面^部分说明)
[root@linux-test test]# history
1 pwd
2 history
[root@linux-test test]# !1 匹配历史命令编号
pwd
/root/test
[root@linux-test test]# !pwd 匹配最近一条历史
pwd
/root/test
* 表示任意多个字符
[root@linux-test ~]# ls
anaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Music Pictures Public Templates Videos
[root@linux-test ~]# ls *.cfg #查看以.cfg结尾文件和目录,之前字符任意全匹配
anaconda-ks.cfg initial-setup-ks.cfg
? 表示一个字符,可以多个?同时用
[root@linux-test test]# ls
123.txt 12.txt 1.txt 45ab.txt
[root@linux-test test]# ls ?.txt
1.txt
[root@linux-test test]# ls ??.txt
12.txt
[] 代表一个和,如[0-9]表示0-9十个数字,[1,3]表示1和3
[root@linux-test test]# ls
123.txt 12.txt 16.txt 1.txt 45ab.txt
[root@linux-test test]# ls 1[0-9].txt
12.txt 16.txt
^ 表示取反,这个通配符必须要在[]中使用,如下显示不是以cfg结尾的文件和目录,^可以用!取代
[root@linux-test ~]# ls *[^cfg]
Desktop:
Documents:
Downloads:
Pictures:
Templates:
Videos:
@ 无意义,一般用来隔离字符串,一般用于文件内容中
# 用于注释字符串,一般用于配置文件中的注释
$ 取值,一般用于变量取值
[root@linux-test test]# x=5
[root@linux-test test]# echo x
x
[root@linux-test test]# echo $x
5
% 用来杀死一个进程
& 后台执行命令
[root@linux-test test]# touch aaa.txt &
[1] 46465 &挂后台执行会反馈一个进程号
&& 逻辑与,当前一个指令执行成功时,执行后一个指令
[root@linux-test test]# ls && pwd
123.txt 12.txt 16.txt 1.txt 45ab.txt aaa.txt
/root/test
|| 逻辑或,当前一个指令执行失败时,执行后一个指令
[root@linux-test test]# lp || pwd
lp: Error - no default destination available.
/root/test
[root@linux-test test]# ls || pwd
123.txt 12.txt 16.txt 1.txt 45ab.txt aaa.txt
() 子进程运行命令
[root@linux-test test]# (y=6)
[root@linux-test test]# echo $y #由于不是在当前进程中执行,所以无法查看变量
+-*/= 运算符,多用于循环和判断语句中
'' 硬引用,里面的字符无意义
"" 软引用,具有变量置换功能
[root@linux-test test]# z=6
[root@linux-test test]# echo 'Num = $z'
Num = $z
[root@linux-test test]# echo "Num = $z"
Num = 6
: 执行后永远为真
echo $? 上一次执行命令的执行状态,0表示成功
[root@linux-test test]# ls
123.txt 12.txt 16.txt 1.txt 45ab.txt aaa.txt
[root@linux-test test]# echo $?
0
[root@linux-test test]# aaaa
bash: aaaa: command not found...
[root@linux-test test]# echo $?
127
[root@linux-test test]# :
[root@linux-test test]# echo $?
0
{} 多个文件集合
[root@linux-test test]# ls
123.txt 12.txt 16.txt 1.txt 45ab.txt aaa.txt
[root@linux-test test]# ls {123.txt,12.txt}
123.txt 12.txt
/ 路径分隔符号
>和>> 输出重定向导向,分别为"覆盖"与"累加"
变量
变量是用来表示程序运行时候改变的状态的,是一个抽象的概念。
变量组成:
[变量名]=[变量实际的值]
变量名:命名一般字母或下划线开头,剩下的可以是字母和数字,变量名不能和关键字冲突,如ls=1
变量值:可以改变的值,一个变量名可以重复赋值,但是变量实际的值为最后赋值后的值
变量类型:
局部变量:只在某一段代码中生效的变量
全局变量:在整个程序的运行中生效的变量
[root@linux-test ~]# n=1 #当前bash进程中设置局部变量
[root@linux-test ~]# bash #切换bash到子进程
[root@linux-test ~]# echo $n #查看变量为空 [root@linux-test ~]# export x=2 #当前bash进程中设置全局变量
[root@linux-test ~]# bash #切换bash到子进程
[root@linux-test ~]# echo $x #查看变量
2
Shell命令执行优先级
==> alias 别名
==> Compound Commands 复合命令(if、for、while等)
==> function 函数
==> build_in 内置命令(cd等)
==> hash hash命令,缓存中用过的命令
==> $PATH 环境变量标明的命令
==> error: command not found 找不到命令时候
bash环境
以下四个文件在登录用户的过程中会依次执行
/etc/profile
~/.bash_profile
~/.bashrc
/etc/bashrc
su user不加-登录,只会加载~/.bashrc、/etc/bashrc
全局环境变量配置一般放在/etc/profile文件中,用户级环境变量一般放在~/.bash_profile
临时设置环境变量:
[root@linux-test ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@linux-test ~]# PATH=/usr/local/nginx/sbin/:$PATH
[root@linux-test ~]# echo $PATH
/usr/local/nginx/sbin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
环境变量中查找命令的顺序是依次往后,比如ls命令在当前设置的变量中,首先会从/usr/local/nginx/sbin下找,找不到会从/usr/local/sbin下找,依次找到为止。
永久设置环境变量:
[root@linux-test ~]# echo "export PATH=/usr/local/nginx/sbin:$PATH" >> /etc/profile #将环境变量的修改写入到开启加载的脚本文件中即可
grep命令详细使用说明
-v 反转匹配
-i 忽略大小写匹配
-r 递归匹配
-w 单词匹配,属完全匹配,只要有分隔符分割即可
-n 显示行号
-q 静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容
-A 如果匹配成功,则将匹配行及其后n行一起打印出来
-B 如果匹配成功,则将匹配行及其前n行一起打印出来
-C 如果匹配成功,则将匹配行及其前后n行一起打印出来
-c 匹配成功,只打印匹配的行数(一共匹配到多少行的数量)打印出来
-E 等于egrep,扩展,多用于加入正则表达式后的匹配
-l 列出文件内容符合指定的范本样式的文件名称,多和-r联用
-L 列出文件内容不符合指定的范本样式的文件名称,多和-r联用
-s 不显示错误信息
-o 只输出文件中匹配到的部分
正则表达式
正则表达式和通配符一样,也是一组特殊符号,通配符是由shell解释执行,正则表达式是由命令解释。

Linux基础系列-Day8的更多相关文章
- Linux基础系列-Day2
基础命令(文件内容管理) 1.cat:在当前终端显示文本文件内容 格式:cat [文件路径] -n 从1开始对所有输出的行数编号 -b 和-n相似,只不过对于空白行不编号:2.head:从文件内容开头 ...
- Linux基础系列-Day1
Linux发展简史 Unix:1969年由美国电话电报公司(AT&T)贝尔实验室的两个工程师所创造的操作系统,它允许计算机同时处理多用户和程序. BSD:重要的Unix分支,1977年由加州大 ...
- Linux基础系列—Linux内核源码目录结构
/** ****************************************************************************** * @author 暴走的小 ...
- Linux基础系列—Linux体系结构和Linux内核结构
/** ****************************************************************************** * @author 暴走的小 ...
- Linux基础系列-Day7
NFS服务(基于CentOS 7.0) NFS(Network File System),网络文件系统,是linux与linux之间进行文件共享的服务,在NFS应用,本地NFS的客户端可以透明地读写位 ...
- Linux基础系列-Day6
Samba服务(基于CentOS 7.0) Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成,Samba主要用于Linux或UNIX和Windows系统之 ...
- Linux基础系列-Day5
网络管理 ifconfig网络管理工具 ifconfig依赖于命令中使用一些选项属性,不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置,但是通过ifconfig修改的通常为临时配置,即系统 ...
- Linux基础系列-Day4
top系统监控 top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具.通过top命令所提供的互动式界面,用热键可以管理. [root@centos-py ...
- Linux基础系列-Day3
Vim文本编辑器 •Linux设计的重要原则是信息存储在基于文本的文件中. 注:Linux“一切皆文件”是指包含文本文件和用户不可读的二进制文件(如block设备文件) •文本文件:无格式文件,作用 ...
随机推荐
- 洛谷金秋夏令营模拟赛 第2场 T11737 时之终末
这道题就是道状压dp...比赛的时候太贪心 然后状压又不好 所以T2 T3一起挂了QAQ 吸取教训QAQ f[i][j][k]表示前i个数选了j个 最后a个的状态为k的答案 #include<c ...
- Vuejs - 单文件组件
为什么需要单文件组件 在之前的实例中,我们都是通过 Vue.component 或者 components 属性的方式来定义组件,这种方式在很多中小规模的项目中还好,但在复杂的项目中,下面这些缺点就非 ...
- Deep learning with Theano 官方中文教程(翻译)(三)——多层感知机(MLP)
关于更多的http://deeplearning.net/tutorial/的翻译还有学习笔记会陆续整理传到博客. 供大家相互交流和学习,本人水平有限,若有各种大小错误,还请巨牛大牛小牛微牛们立马拍砖 ...
- Watchcow(POJ2230+双向欧拉回路+打印路径)
题目链接:http://poj.org/problem?id=2230 题目: 题意:给你m条路径,求一条路径使得从1出发最后回到1,并满足每条路径都恰好被沿着正反两个方向经过一次. 思路:由于可以回 ...
- Spring Cloud与Spring Boot的关系
1.Spring Cloud是一个工具集:Spring Cloud是在Spring Boot的基础上构建的,用于简化分布式系统构建的工具集:使架构师在创建和发布微服务时极为便捷和有效. Sp ...
- Django【设计】settings方案
配置文件: 目标:配置文件,默认配置和手动配置分开,参考django的配置文件方案,默认配置文件放在内部,只让用户做常用配置 /bin/settings.py(手动配置) PLUGIN_ITE ...
- SQL语句语法简介
SQL命令一般分为DQL.DML.DDL几类: DQL:数据查询语句,基本就是SELECT查询命令,用于数据查询 DML:Data Manipulation Language的简称,即数据操纵语言,主 ...
- 64_d1
DSDP-5.8-15.fc26.i686.rpm 13-Feb-2017 22:06 658926 DSDP-5.8-15.fc26.x86_64.rpm 13-Feb-2017 22:09 653 ...
- 005 JAVA多线程和并发基础面试问答(转载)
原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-answers/ 多线程和并发问题是Ja ...
- C后端设计开发 - 第4章-武技-常见轮子下三路
正文 第4章-武技-常见轮子下三路 后记 如果有错误, 欢迎指正. 有好的补充, 和疑问欢迎交流, 一块提高. 在此谢谢大家了. Moonlight Shadow 纪念那个我爱的, 被我感动的女孩 ...