Shell基础知识

说明:文章仅供学习交流,转载请标明出处,欢迎转载。

参考资料:《鸟哥的Linux私房菜基础学习篇:第三版》

       shell是用户程序与系统内核沟通的唯一渠道,通过shell命令,我们可以很轻松的读写内核中的相关信息。本文参照《鸟哥的Linux私房菜基础学习篇:第三版》相关知识,对一些Shell基本知识做了总结。

        1.Shell有很多种,bash是很多Linux系统默认的Shell,目前bash也是标准的Shell,bash的有点如下:

            (1)命令记忆。通过#history查询,记录在/.bash_history中;

            (2)命令和文件补全。通过连续按两次[tab]键;

            (3)可设置命令别名。记得C++中的引用吧,这里的别名就如同C++中变量的引用,通过#alias命令查询;

            (4)通配符。如*、?、[]等通配符的引用,可以快速定位文件;

            (5)可以编写Shellscript脚本。一提到脚本应该都听过吧,如PHP,Python,perl等。

       2.type命令
            作用
:查询命令是外部命令还是内置命令。

           格式 type 选项 命令名

            选项

                      不加,显示出是外部命令还是bash内置命令

                     -t:直接显示命令类型(file,alias,builtin)

                     -p:显示完整的文件名(包含路径)

                     注意:当命令很长时,可将命令分成两行,用反斜杠\,例如:

                      例如:mv aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt  \

                                  >bb.txt

       3.变量

                环境变量:相当于C/C++中的全局变量,通常用全大写字母表示;

                自定义变量:相当于C/C++中的局部变量;

               变量相关操作: 

                            (1)定义一个变量x。#declare x。(变量的命名规则跟C/C++一样)

                                       -a:数组型   -i:整型    -x:环境变量    -r:相当于C++中的const型,只读。

                                       变量的默认类型为字符串,declare +x sum 取消sum环境变量的性质

                              (2)将自定义变量x设置为全局变量。 #export x

                              (3)取消变量x的定义。#unset x

                              (4)输出变量x所代表的值。 #echo $x

                              (5)给变量x赋值。#x="abc"

                              (6)给变量本身增加内容。#x=$x:aaa,此时变量x=abc:aaa

                              (7)输出变量x的内容,并在后面加一个!。#echo "$name ! [空格]“,切记空格不能丢。

                                  几个特殊的字符:\ (反斜杠) '(单引号) "(双引号) `(反单引号)的意义如下:

                                 反斜杠:转义字符,C/C++接触过吧;

                                 单引号和双引号:Shell中两者都可以表示字符串,区别在于,双引号考虑实际意义,而单引号全部都视为字符。所谓实际意义 指的是,字符串中可能含有变量,如str=”$x+$y=$z",echo str。

                                 反单引号:单引号可用于返回执行命令的结果,例如:x=`ls -l` 等价于 x=$(ls -l)

               查询当前系统只有哪些环境变量的命令:#export 或 env

               查询当前系统所有命令(包括自定义的和环境变量):#set

                常见的环境变量

                            HOME:当前工作目录

                             SHELL:当前使用的SHELL版本

                             HISTSIZE:历史命令记录条数

                             MAIL:邮箱路径

                             PATH:文件查找路径(还记得jdk1.6使用的第一步就是设置路径吧)

                             LANG:语言,可以用#locale命令查询。

                            PS1:#左边的那个提示符

                            $:线程PID

                             ?:上一次执行命令的结果,执行成功则返回0

           4.读取变量值read

               类似于C语言中的scanf和C++中的cin.

              read 选项 变量名

                 选项-p:接提示符

                            -t:提示的秒数

                例如

                             #read -p "input your name:" -t 30 name

                            #Tom

                            #echo $name

           5.两个重要登录配置文件

                 /etc/issue:显示登录前信息

                  /etc/motd:显示登录后信息

                 可以通过修改者两个文件,来更改登陆前后的相关提示。

          6.通配符

                 *: 0~无穷个字符                    ?:仅代表一个任意字符

                []:一定有一个字符位于[]中         [a-z]:一定有一个字符位于a-z范围内

                 [^}:一定有一个字符不在[]中

                例如:

                        /etc/a*                      //以a开头的文件名

                       /etc/????                  //刚好有四个字符的文件名

                      /etc/*[0-9]*                //含有数字的文件名

                     /etc/[^a-z]*                 //非小写字母开头的文件名

          7.特殊字符

               # 注释(相当于c中的//)                           $ 变量标志                                 \ 转义字符

                &作业控制                                              |  管道                                       ;  连续命令

                ~  主文件夹                                            输出重定向,覆盖                  >> 输出重定向,追加

                ’str'原封不动输出str                               "str" 考虑 str的实际意义输出   $(cmd)执行cmd,等价于 `cmd`

           8.创建文件的三种方法

                   (1)vim 1.txt 

                   (2) touch 1.txt 

                   (3) cat >1.txt <<"终止字符“   //终止字符等价于[ctrl]+[d]

          9.  ; && ||

                  cmd1;cmd2  先执行cmd1,再执行cmd2

                  cmd1 && cmd2  cmd1成功才执行cmd2(想到C语言中的逻辑与)

                  cmd1 || cmd2    cmd1执行失败时才执行cmd2(想到C语言中的逻辑或)

                  cmd1 && cmd2 || cmd3<==>  exe(cmd1)==0 ? cmd2:cmd3    //cmd1执行成功时返回0

                  cmd1|| cmd2 && cmd3  <==>  exe(cmd1)==0?  cmd3:cmd2,cmd3

        10 管道命令

                       还记得操作系统中进程间的通信的几种常用的方式(共享存储器消息传递系统管道套接字)吗?没错,管道就是一种FIFO的文 件。在 Linux中,管道命令指的是:将前一个命令的输出作为后一个命令的输入。管道命令分类如下:

                     选取命令: cut,grep

                     排序命令:sort ,wc ,uniq

                     双向重定向:tee

                     字符转换命令:tr, col , join, paste, expand

                     分割命令: split

                     下面一一列举这几种命令的用法

                     ( I). 选取命令 

                              cut命令:对每一行的内容分段

                              格式 cut -d '分隔符' -f  第K个

                              选项:

                                           -d:后接分隔符

                                           -f:去分开后的第几个字段

                                          -c:确定分区范围

                               举例:

                                         #cat 1.txt 

                                          ==> 12345aaa

                                                 12345bbb

                                                 12345ccc

                                       #cat 1.txt | cut -d '5' -f 1

                                         ==>1234

                                               1234

                                               1234

                                     #cat 1.txt | cut -c 1-6

                                        ==>12345a

                                              12345b

                                               12345c

                             grep命 令:根据匹配信息输出对应的整行信息

                                     格式:grep 选项   '匹配str' 文件名

                                      选项: 

                                                -a:将二进制文件以text文件的方式查找数据

                                                 -c:计算找到'str'的次数

                                                  -i:忽略大小写

                                                 -n:顺便输出行号 

                                                 -v:将不匹配的输出

                                                --color=auto 对找到的匹配项对应的关键字用特殊颜色显示

                    (2)排序命令

                             sort 命令:依据不同的数据类型排序

                             格式:sort 选项 文件

                              选项:

                                       -f:忽略大小写差异

                                        -b:忽略最前面的空格部分

                                        -M:按月份排序

                                         -n:按数字顺序(默认以文字类型排序)
                                         -r:逆序

                                         -u:(uniq)相同的数据中,仅出现一行代表

                                          -t:分隔符,默认用[tab]分开

                                          -k:对第k个属性排序

                              uniq命令:将重复数仅列出一个显示

                               格式:uniq 选项

                               选项: 

                                         -i:忽略大小写

                               举例:

                                         #last | cut -d ' ' -f 1 | sort | uniq -c

                                         ==>1 

                                               12 reboot 

                                               41 root

                                                1 wtmp

                    wc命令:统计字数,行数

                         格式:wc  选项

                           选项

                                 -l :仅列出行

                                 -w:仅列出多少字

                                 -m:多少字符

                          例如:

                                  #cat 1.txt | wc

                                   ==>aaa

                                         bbb

                                         ccc

                                        ddd

                                  行数:4

                                   字数:4

                                   字符数:16

                   (3)双向重定向

                              tee命令:同时将结果输出至屏幕和文件中。

                               格式tee 选项  文件名

                               选项

                                       -a:以追加的方式将数据加入至文件中。

                              例如

                                     #cat 1.txt | tee -a 2.txt    //将1.txt显示出来并追加到2.txt中

                  (4)字符转换命令

                           tr命令:对一段数据中的文字做删除或替换,但不会对原文件处理,只会对中间数据使用
                              用法:tr 选项  str...

                             选项: 

                                       -d:删除数据中的str

                                       -s:替换掉重复的字符str

                              举例:

                                      I.cat 1.txt | tr a A          //将1.txt中的a 用A替换

                                      II. cat 1.txt | tr -d a        //删除所有的a

                                      III. cat 1.txt | tr -s a      //将同一行中重复且连续的字符去掉

                         col命令:用于处理特殊键

                             用法:col 选项 

                             选项:

                                        -x :将[tab]->对等的[空格]

                                       -b:在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符。

                          join命令:将两个文件中相同的数据的哪一行加在一起。

                           用法 join 选项 file1 file2

                            选项:

                                      -t:后接分隔符,默认为空格符

                                      -i:忽略大小写

                                     -1:对第一个文件

                                     -2:对第二个文件

                          举例

                                    #cat 1.txt 

                                     输出: a:aa

                                                b:bb

                                                c:cc 

                                               d:dd

                                    #cat 2.txt

                                     输出:  a:11

                                                 a:22

                                                 a:33

                                                 a:44

                                  #join 1.txt 2.txt

                                      无反应,默认为空格分割

                                  #join -t ':' 1.txt  2.txt 

                                   输出: a:aa:11

                                              a:aa:22

                                              a:aa:33 

                                              a:aa:44

                          paste命令:对应同行合并(第一个文件的第k行与第二个文件的第K行合并)

                                    用法:paste -d file1 file2

                                    选项

                                             -d:后接分隔符

                                              -:如果file部分为-,表示标准输入

                                 举例

                                              #cat 1.txt  

                                                  输出:aaaa

                                            #cat 2.txt

                                                  输出:1111

                                                             2222

                                                             3333

                                                             4444

                                           #paste -d '|' 1.txt 2.txt

                                                    输出: aaaa | 1111

                                                                           2222

                                                                           3333

                                                                           4444

                      expand命令:将[tab]转换成空格

                                用法:  expand -t 文件名

                                选项:

                                         -t:后面接数字,默认情况下,一个[tab]可以用8个空格键替换,我们可以自行定义一个[tab]对应多少个字

                     split命令:将一个大文件分割成小文件

                               用法:split 选项  文件名  小文件的前缀

                                选项:

                                         -b:分割大小,可加 b,k,m

                                          -l:以行数进行分割

                      >>:合并操作

                                         #cat 1.txt 2.txt >>3.txt //将1.txt 2.txt合并成3.txt

                   注意:在管道命令中,经常会使用到前一个命令的stdout作为下一个命令的stdin,当某些命令需要要到文件名来处理时,该         stdin与stdout可以用-(建号)来替换,例如:#tar -cvf  -  1.txt 2.txt | tar -xvf - 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值