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的更多相关文章

  1. Linux基础系列-Day2

    基础命令(文件内容管理) 1.cat:在当前终端显示文本文件内容 格式:cat [文件路径] -n 从1开始对所有输出的行数编号 -b 和-n相似,只不过对于空白行不编号:2.head:从文件内容开头 ...

  2. Linux基础系列-Day1

    Linux发展简史 Unix:1969年由美国电话电报公司(AT&T)贝尔实验室的两个工程师所创造的操作系统,它允许计算机同时处理多用户和程序. BSD:重要的Unix分支,1977年由加州大 ...

  3. Linux基础系列—Linux内核源码目录结构

    /** ****************************************************************************** * @author    暴走的小 ...

  4. Linux基础系列—Linux体系结构和Linux内核结构

    /** ****************************************************************************** * @author    暴走的小 ...

  5. Linux基础系列-Day7

    NFS服务(基于CentOS 7.0) NFS(Network File System),网络文件系统,是linux与linux之间进行文件共享的服务,在NFS应用,本地NFS的客户端可以透明地读写位 ...

  6. Linux基础系列-Day6

    Samba服务(基于CentOS 7.0) Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成,Samba主要用于Linux或UNIX和Windows系统之 ...

  7. Linux基础系列-Day5

    网络管理 ifconfig网络管理工具 ifconfig依赖于命令中使用一些选项属性,不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置,但是通过ifconfig修改的通常为临时配置,即系统 ...

  8. Linux基础系列-Day4

    top系统监控 top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具.通过top命令所提供的互动式界面,用热键可以管理. [root@centos-py ...

  9. Linux基础系列-Day3

    Vim文本编辑器 •Linux设计的重要原则是信息存储在基于文本的文件中.  注:Linux“一切皆文件”是指包含文本文件和用户不可读的二进制文件(如block设备文件) •文本文件:无格式文件,作用 ...

随机推荐

  1. JAVA JDBC(存储过程和事务管理)

    1.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程 ...

  2. 基本控件文档-UIButton属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  3. DotNETCore 学习笔记 MVC视图

    Razor Syntax Reference Implicit Razor expressions <p>@DateTime.Now</p> <p>@DateTim ...

  4. HDU 1574 RP问题 (dp)

    题目链接 Problem Description 在人类社会中,任何个体都具有人品,人品有各种不同的形式,可以从一种形式转换为另一种形式,从一个个体传递给另一个个体,在转换和传递的过程中,人品不会消失 ...

  5. 【ALB学习笔记】基于多线程方式的串行通信接口数据接收案例

    基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...

  6. Ribbon的主要组件与工作流程

    一:Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接 ...

  7. Django 1.10中文文档-第一个应用Part5-测试

    本教程上接教程Part4. 前面已经建立一个网页投票应用,现在将为它创建一些自动化测试. 自动化测试简介 什么是自动化测试 测试是检查你的代码是否正常运行的行为.测试也分为不同的级别.有些测试可能是用 ...

  8. inet_select_addr

    当通过输出设备向目的地址发送报文时,如果没有源地址,则需要调用inet_select_addr来选择ip地址作为源地址: /* 选择ip地址 通过设备找到ip控制块,从ip控制块中遍历地址列表中的主地 ...

  9. gpio子系统和pinctrl子系统(中)

    pinctrl子系统核心实现分析 pinctrl子系统的内容在drivers/pinctrl文件夹下,主要文件有(建议先看看pinctrl内核文档Documentation/pinctrl.txt): ...

  10. linux===给新手的 10 个有用 Linux 命令行技巧(转)

    本文转自:http://www.codeceo.com/article/10-linux-useful-command.html?ref=myread 仅用作学习交流使用.如有侵权,立删 我记得我第一 ...