【158】◀▶ Linux-Bash学习

鸟哥的 Linux 私房菜      Linux 的 26 个命令      Shell 脚本教程      Linux 命令大全

目录——按文件顺序:
  • date:日期
  • cd:改变路径
  • ls:列出文件信息
  • pwd:打印工作空间
  • mkdir:创建目录
  • cp:复制文件
  • mv:移动文件
  • cat:标准输出
  • more标准输出
  • less标准输出
  • nano:文本编辑器
  • reboot:重启命令
  • poweroff:关机命令
  • ping:测试网络
  • grep:返回匹配项目
  • tar:创建归档文件
  • ln:创建链接
  • passwd:改变密码
  • whereis:查找文件
  • find:查找文件
  • stat:状态信息
  • file:识别文件类型
  • tail:尾部标准输出
  • head:头部标准输出
  • touch:修改时间
  • ps:进程信息
  • kill:终止进程
  • killall:杀死指定进程
  • sort:排序
  • printenv:环境变量值
  • exit:退出shell
  • set:显示shell变量
  • unset:删除shell变量
  • alias:设置指令别名
  • test:测试条件表达式
  • expr:计算工具
目录——按字符顺序:

  • alias:设置指令别名




  • echo:显示变量内容
  • env:默认变量内容
  • eval:变量迭代
  • exit:退出shell
  • export:变成系统变量
  • expr:计算工具

  • grep:返回匹配项目

  • head:头部标准输出
  • help:帮助



  • less标准输出
  • ln:创建链接
  • ls:列出文件信息

  • man:帮助
  • mkdir:创建目录
  • more标准输出
  • mv:移动文件

  • nano:文本编辑器


  • tail:尾部标准输出
  • tar:创建归档文件
  • tee:文本+屏幕
  • test:测试条件表达式
  • top:任务管理器
  • touch:修改时间
  • tr:变换字符





  • 光标

    • up(方向键上) 可以调出输入历史执行记录,快速执行命令
    • down(方向键下) 配合 up 选择历史执行记录
    • Home 移动光标到本行开头
    • End 移动光标到本行结尾
    • PgUp 向上翻页
    • PaDN 向下翻页
    • ctrl + c 终止当前程序

  • Tab 补全

      Tab 补全是非常有用的一个功能,可以用来自动补全命令或文件名,省时准确。

    • 未输入状态下连按两次 Tab 列出所有可用命令
    • 已输入部分命令名或文件名,按 Tab 进行自动补全,多用你就肯定会喜欢的了。

  • echo显示变量内容;用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。
       语法:echo [选项]... [参数...]
       参考:echo命令

  • printf:格式化并输出结果到标准输出。
       语法:printf format-string [arguments...]
       参考:printf命令
       参考:shell printf命令:格式化输出语句
       参考:bash之printf (分享)
  • env显示目前系统中主要的默认变量内容;
       用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。该命令只使用"-"作为参数选项时,隐藏了选项"-i"的功能。若没有设置任何选项和参数时,则直接显示当前的环境变量。
       如果使用env命令在新环境中执行指令时,会因为没有定义环境变量"PATH"而提示错误信息"such file or directory"。此时,用户可以重新定义一个新的"PATH"或者使用绝对路径。
       语法:env [选项]... [-] [名称=值]... [命令 [参数]...]
       参考:
    env命令
  • 变量设定规则单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符,而不会有特殊符号;

  • exportexport 可以将一般自定义的变量变成环境变量;
       一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。
       说明:自己理解,通过 export 的变量,在其子文件中可以使用,例如在 a.sh 中 export user=Alex,同时在文件中写入 bash b.sh,然后在 b.sh 中直接写入 echo $user,则运行 a.sh 的时候就会调用 b.sh 然后打出 Alex,但是直接运行 b.sh 就不能打出来!
       语法:export [-fnp][变量名称]=[变量设置值]
       参考:export命令

  • declare:用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项,则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的。
       语法:
    declare(选项)(参数)

    来自: http://man.linuxde.net/declare
    declare(选项)(参数)

    来自: http://man.linuxde.net/declare
    export(选项)(参数)
       参考:declare命令

  • 变量的有效范围
  • 其他注意事项

  • read变量内容是由用户由键盘输入的;
       语法:
    read(选项)(参数)

    来自: http://man.linuxde.net/read
    read(选项)(参数)
       参考:read命令

  • $RANDOM随机取随机数;
    echo $(($RANDOM%26))    #1-25随机整数
    echo `expr $RANDOM % 26`    #1-25随机整数
       参考:Shell的RANDOM变量

  • eval主要是用来做为变量的『迭代』用的;

  • 历史指令记录数据

  • source在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"
       语法:source FileName
       参考:source、sh、bash、./执行脚本的区别

  • cut用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容,类似于下的type命令。
       语法:cut [选项]... [文件]...
       参考:cut命令

  • wc用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。
       语法:wc [选项]... [文件]...
       参考:wc命令

  • uniq这个指令用来将『重复的行删除掉只显示一个』;用于报告或忽略文件中的重复行,一般与sort命令结合使用。
       语法:uniq [选项]... [文件]...
       参考:uniq命令

  • tee用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。
       语法:tee [选项]... [文件]...
       参考:tee命令

  • tr可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。
       语法:tr [选项]... SET1 [SET2]...
       参考:tr命令

  • split可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。
       语法:split [选项]... [输入 [前缀]]...
       参考:split命令

  • wget:用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
       语法:wget [选项]... [URL]...
       说明:下载:
                     -t,--tries=NUMBER        设置重试次数为 NUMBER(0 代表无限制)。
                            --retry=NUMBER        即使拒绝连接也是重试。

                     -c,--continue        继续下载部分下载的文件

                     -T,--timeout=SECONDS        将所有超过设为 SECONDS 秒。
                             --retry=NUMBER        即使拒绝连接也是重试。


             HTTP 选项:
                     --http-user=USER        设置 http 用户名为 USER。
                     --http-password=PASS        设置 http 密码为 PASS。


             FTP 选项:
                     --ftp-user=USER        设置 ftp 用户名为 USER。
                     --ftp-password=PASS        设置 ftp 密码为 PASS。
    wget http://112.124.15.130/res/linuxde_man/images/s-ad.jpg
    wget http://oceandata.sci.gsfc.nasa.gov/cgi/getfile/T20152742015304.L3m_MO_SST4_sst4_4km.nc
       参考:wget命令
  • bzip2:用于创建和管理(包括解压缩)“.bz2”格式的压缩包。
       语法:bzip2(选项)(参数)
       说明:-d,--decompress        (强制)执行解压缩。
             -z,--compress        强制执行压缩

       参考:bzip2命令

  • let:是bash中用于计算的工具,提供常用运算符还提供了方幂**运算符。在变量的房屋计算中不需要加上$来表示变量,如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1。
       语法:let arg [arg ...] #arg代表运算式
    let arg [arg ...] #arg代表运算式

    来自: http://man.linuxde.net/let

       参考:let命令
  • su:用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
       语法:su(选项)(参数)
       参考:su命令
  • seq:http://man.linuxde.net/seq
    用法:seq [选项]... 尾数
     或:seq [选项]... 首数 尾数
     或:seq [选项]... 首数 增量 尾数
    以指定增量从首数开始打印数字到尾数。

      -f, --format=格式    使用printf 样式的浮点格式
      -s, --separator=字符串    使用指定字符串分隔数字(默认使用: )
      -w, --equal-width    在列前添加0 使得宽度相同
          --help        显示此帮助信息并退出
          --version        显示版本信息并退出

    如果省略了首数或者增量,则默认其值为1,即使这样尾数仍小于首数。
    首数、增量和尾数均以浮点数形式解释。当首数小于尾数时增量一般为正值,
    相反在首数大于尾数时增量一般为负数。
    指定的格式必须适用于显示"double"类型的参数;当首数、增量和尾数均为指定
    精确度的定点十进制数时默认为"%.精确度f",否则默认为"%g"。
    用于产生从某个数到另外一个数之间的所有整数。
    用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
    用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
    用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
    用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
    用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
    用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
    用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
    用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
    用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
  • 用于产生从某个数到另外一个数之间的所有整数。

    来自: http://man.linuxde.net/seq
  • Shell 提示符:输入代码时候,前面默认显示的部分。
      PS1:控制默认命令行提示符的格式。
      PS2:控制后续命令行提示符的格式。(连续输入的时候,显示的格式)
      

 

  • man 命令:用来访问存储在 Linux 系统上的手册页面。点击“Q”退出手册页面。即 Mannual。
      语法:man 命令名称
      
      

 

  • info:与 man 不同的是,可以像浏览网页一样在各个节点中跳转。

  • help:命令选项的简单介绍
      语法:命令名称 --help
      

 

 

  • cd:该命令用来切换当前目录。cd 是change directory 的缩写。(类似工作空间)
      语法:cd [-L|-P] [dir]
      说明:单点符(.),表示当前目录;
            双点附(..),切换到表示当前目录的父目录;(../..,上上层目录)
            波浪线(~),切换到用户的宿主目录;
            斜杠线(/),切换到用户的根目录;
            连字符(-),返回进入当前目录所在目录,相当于撤回上面的操作。

       参考:Linux命令学习总结:cd命令

  • ls:列出 File 的信息(默认为当前目录)。ls 是 list 的缩写。
       语法:ls [选项]... [文件]...
       说明:ls -1,单行只显示一个文件
             ls -l | grep ^-,只显示文件
             ls -l | grep ^d,只显示文件夹
       参考:ls命令的20个实用范例
       参考:linux中ls命令全部参数 
       参考:ls命令只显示目录或文件(linux) 
       参考:linux ls 只显示文件或者文件夹

  • pwd:列出当前路径或者工作空间。pwd 是 print working directory 的缩写。
       语法:pwd [-LP]
       参考:Linux命令学习总结:pwd命令

  • mkdir:若指定目录不存在则创建目录。即 make directory。
       语法:mkdir [选项]... 目录...

  • rm:删除文件。即 remove。
       语法:rm [选项]... 文件...
       参考:Linux命令学习总结:rm命令
  • mkdir:删除指定的空目录。即 remove directory。
       语法:rmdir [选项]... 目录...
       参考:Linux命令学习总结:rmdir

  • cp:将源文件复制至目标文件,或将多个源文件复制至目标目录。即 copy。
       语法:cp [选项]... [-T] 源文件 目标文件
            or
            cp [选项]... 源文件... 目标文件
            or

            cp [选项]... -t 目录 源文件...

    cp source dest            ### 将 source 复制到 dest
    cp folder/*  dest         ### 将 folder 下所有文件(不含子文件夹中的文件)复制到 dest
    cp -r folder  dest        ### 将 folder 下所有文件(包含子文件夹中的所有文件)复制到 dest

      参考:每天一个linux命令(8):cp 命令

  • mv:将源文件重命名为目标文件,或将源文件移动到指定目录。即 move。
       语法:mv [选项]... [-T] 源文件 目标文件
             or
             mv [选项]... 源文件... 目标文件
             or
             mv [选项]... -t 目录 源文件...

    mv source  folder        ### 将 source 移动到 folder 下,完成后则为  folder/source
    mv -i source folder      ### 在移动时,若文件已存在则提示 **是否覆盖** 
    mv source dest           ### 在 dest 不为目录的前提下,重命名 source 为 dest
       参考:每天一个linux命令(7):mv命令

  • cat:将[文件]或标准输入组合输出到标准输出(用于输出文件内容到 Terminal)。即 concatenate。
       语法:cat [选项]... [文件]...
    #cat主要有三大功能:
    #1.一次显示整个文件:cat filename
    #2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.
    #3.将几个文件合并为一个文件:cat file1 file2 > file
    
    cat /etc/locale.gen     ### 输出 locale.gen 的内容 
    cat -n /etc/locale.gen  ### 输出 locale.gen 的内容并显示行号
       参考:每天一个linux命令(10):cat 命令

  • more:more 与 cat 相似,都可以查看文件内容,所不同的是,当一个文档太长时, cat 只能展示最后布满屏幕的内容,前面的内容是不可见的。这时候可用 more 逐行显示内容。
       语法:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [file ...]
    more /etc/locale.gen
    more +100 /etc/locale.gen       ### 从 100 行开始显示
       参考:每天一个linux命令(12):more命令

  • less:less 与 more 相似,不过 less 支持上下滚动查看内容,而 more 只支持逐行显示。
       语法:less [参数]  文件
       参考:每天一个linux命令(13):less 命令

  • nano:nano 是一个简单实用的文本编辑器,使用简单。
       语法:nano [选项] [[+行,列] 文件名称]...
    nano  filename       ### 编辑 filename 文件,若文件不存在,则新打开一个文件,若退出时保存,则创建该文件
    
    #编辑完后,ctrl+X 提示是否保存,按 y 确定保存即可(最后加一个回车)。
    #注意:在使用过程中可用 ctrl+G 获取帮助。
       参考:linuxmint下nano编辑器使用教程
  • reboot:为重启命令。
  • poweroff: 为关机命令。

  • ping:主要用于测试网络连通,通过对目标机器发送数据包来测试两台主机是否连通,及延时情况。
       语法:ping [参数] [主机名或IP地址]
       参考:每天一个linux命令(54):ping命令

  • grep:主要用于返回匹配的项目,支持正则表达式。
       语法:grep [选项]... pattern [file]...
    grep PATTERN filename      ### 返回所有含有 PATTERN 的行
    grep zh_CN /etc/locale.gen ### 返回所有含 zh_CN 的行
    
    grep 'linux' test.txt test2.txt     #从多个文件中查找
    
    grep ^u test.txt
    cat test.txt |grep ^u    #找出已u开头的行内容
    
    grep ^[^u] test.txt
    cat test.txt |grep ^[^u]    #输出非u开头的行内容
    
    #其他用法参考下面链接!!!
       参考:每天一个linux命令(39):grep 命令
       参考:grep-鸟哥

  • tar:主要用于创建归档文件,和解压归档文件,其本身是没有压缩功能的,但可以调用 gzipbzip2 进行压缩处理。
       语法:tar [选项...] [file]...
       说明:解包:tar xvf FileName.tar
             打包:tar cvf FileName.tar DirName
             (注:tar是打包,不是压缩!)
    tar -cvf filename.tar .       ### 将当前目录所有文件归档,但不压缩,注意后面有个 ’.‘ ,不可省略,代表当前目录的意思 
    tar -xvf filename.tar         ### 解压 filename.tar 到当前文件夹
    tar -cvjf filename.tar.bz2 .  ### 使用 bzip2 压缩
    tar -xvjf  filename.tar.bz2   ### 解压 filename.tar.bz2 到当前文件夹
    tar -cvzf filename.tar.gz     ### 使用 gzip  压缩
    tar -xvzf filename.tar.gz     ### 解压 filename.tar.gz 到当前文件夹
    tar -tf   filename            ### 只查看 filename 归档中的文件,不解压
       参考:每天一个linux命令(28):tar命令

  • ln:主要用于在两个文件中创建链接,链接又分为 Hard Links (硬链接)和 Symbolic Links (符号链接或软链接),其中默认为创建硬链接,使用 -s 参数指定创建软链接。
       语法:ln [选项]... [-T] 目标 连接名(创建指定名称且指向指定目标链接)
             or
             ln [选项]... 目标(在当前目录创建指向目标位置的链接)

             or
             ln [选项]... 目标... 目录(在指定目录中创建指向指定目标的链接,下同)
             or
             ln [选项]... -t 目录 目标...
       参考:每天一个linux命令(35):ln 命令

  • passwd:用于改变用户登录密码。
       语法:passwd [选项...] <账号名称>
    passwd                 ### 不带参数更改当前用户密码
    passwd newuser         ### 更改上述新建的 newuser 的用户密码 

 

  • whereis:用于查找文件、手册等。
       语法:whereis [-bmsu] [BMS 目录名 -f ] 文件名
        $ whereis bash 
        bash: /usr/bin/bash /etc/bash.bashrc /etc/bash.bash_logout /usr/share/man/man1/bash.1.gz /usr/share/info/bash.info.gz
        $ whereis -b bash       ### 仅查找 binary
        bash: /usr/bin/bash /etc/bash.bashrc /etc/bash.bash_logout
        $ whereis -m bash       ### 仅查找 manual
        bash: /usr/share/man/man1/bash.1.gz /usr/share/info/bash.info.gz
       参考:每天一个linux命令(17):whereis 命令

  • find:也用于查找文件,但更为强大,支持正则,并且可将查找结果传递到其他命令。
       语法:
       参考:每天一个linux命令(22):find 命令的参数详解

  • stat:提供文件系统上某个文件的所有状态信息。
       语法:stat [选项]... 文件...

  • file:该命令用来识别文件类型,也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的。
       语法:file [选项]... 文件...

       参考:Linux命令学习总结: file命令

  • tail:依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容。(显示每个指定文件的最后 10 行到标准输出)
       语法:tail [选项]... 文件...
       参考:每天一个linux命令(15):tail 命令

  • head:用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。(将每个指定文件的头 10 行显示到标准输出)
       语法:head [选项]... 文件...
       参考:每天一个linux命令(14):head 命令

  • touch:将每个文件的访问时间和修改时间改为当前时间。
       语法:touch [选项]... 文件...
       参考:每天一个linux命令(9):touch 命令
  • ps:ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
       语法:ps [选项]
       参考:每天一个linux命令(41):ps命令
  • top:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
       语法:top [选项]
       参考:每天一个linux命令(44):top命令

  • kill:Linux 中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以 使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用 ps/pidof/pstree/top 等工具获取进程 PID, 然后使用kill命令来杀掉该进程。
       语法:kill [选项] [进程号]
       参考:每天一个linux命令(42):kill命令

  • killall:用 于杀死指定名字的进程(kill processes by name)。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的 进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。
       语法:killall [选项] [进程号]
       参考:每天一个linux命令(43):killall命令

  • sort:将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
       语法:sort [选项]... [文件]...
             or
             sort [选项]... --files0-from=F
       参考:linux sort 命令详解
       参考:sort-鸟哥

  • printenv:显示指定的环境变量的值。
       语法:printenv [选项]... [变量]...

  • exit:用于退出shell,并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。
       语法:exit [选项]
       参考:exit命令
       参考:exit(0)和exit(1)区别

  • set:用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。
       语法:set [选项] [参数...]
       参考:set命令
       参考:set-鸟哥

    YGS-BNLI-T3@YGS-BNLI-T3-PC ~
    $ set name
    
    YGS-BNLI-T3@YGS-BNLI-T3-PC ~
    $ name="Alex"  name=`cat 'file1.txt'`  表示将file1.txt的内容赋值给name
    
    YGS-BNLI-T3@YGS-BNLI-T3-PC ~
    $ echo $name
    Alex

 

  • unset:用于删除已定义的shell变量(包括环境变量)和shell函数。unset命令不能够删除具有只读属性的shell变量和环境变量。
       语法:unset [选项] [参数...]
       参考:unset命令
       参考:unset-鸟哥

  • alias:用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号''将原来的命令引起来,防止特殊字符导致错误。
       语法:alias [选项] [参数...]
    alias cls='clear'
    cls    #clear screen
       参考:alias命令
       参考:命令别名-鸟哥
  • test:是shell环境中测试条件表达式的实用工具。
       语法:test [选项]
       参考:test 命令
  • expr:是一款表达式计算工具,使用它完成表达式的求值操作。
       语法:expr 表达式
             or
             expr 选项
       参考:expr命令
       参考:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
       注意:
    result=`expr 2 + 3` 
             #注意里面的空格,都是必须的
              result=$(expr $no1 + 5) 
       说明:expr的常用运算符:
                 加法运算:+
                 减法运算:-
                 乘法运算:*
                 除法运算:/
                 求摸(取余)运算:%


    是一款表达式计算工具,使用它完成表达式的求值操作。

    来自: http://man.linuxde.net/expr
    是一款表达式计算工具,使用它完成表达式的求值操作。

    来自: http://man.linuxde.net/expr
  • Shell变量
  • Shell特殊变量
  • Shell替换
  • Shell运算符
  • Shell注释
  • 字符串:字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。
        单引号字符串的限制:
    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
    • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
        双引号的优点:
    • 双引号里可以有变量
    • 双引号里可以出现转义字符
       参考:Shell字符串  

  • 数组:bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
       语法:在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为。
             array_name=(value1 ... valuen)
       参考:Shell数组:shell数组的定义、数组长度
       参考:array-鸟哥

  • if else 语句:通过关系运算符判断表达式的真假来决定执行哪个分支。
       语法:if·[·expression·]
             then
                 Statement(s) to be executed if expression is true
             fi
    - or -
             if
    ·[·expression·]
             then
                 Statement(s) to be executed if expression is true
             else
                 Statement(s) to be executed if expression is not true
             fi
    - or -
             if·
    [·expression 1·]
             then
                 Statement(s) to be executed if expression 1 is true
             elif·[·expression 2·]
             then
                 Statement(s) to be executed if expression 2 is true
             elif·[·expression 3·]
             then
                 Statement(s) to be executed if expression 3 is true
             else
                 Statement(s) to be executed if no expression is true

             fi

       注意:if、expression 和方括号([ ])之间必须有空格,否则会有语法错误。
    #!/bin/sh
    a=10
    b=20
    if [ $a == $b ]
    then
       echo "a is equal to b"
    fi
    if [ $a != $b ]
    then
       echo "a is not equal to b"
    fi 
       参考:Shell if else语句
       参考:shell中if条件字符串、数字比对,[[ ]]和[ ]区别
             参考:6 Bash Conditional Expression Examples ( -e, -eq, -z, !=, [, [[ ..)
             注意:if [ -e $file ] 用来判断文件是否存在
  • case esac 语句:是一种多分枝选择结构。case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。
       语法:casein
             模式1)
                 command1
                 command2
                 command3
                 ;;
             模式2)
                 command1
                 command2
                 command3
                 ;;
             *)
                 command1
                 command2
                 command3
                 ;;
             esac
       参考:Shell case esac语句
  • for 循环:for 循环。
       语法:for 变量 in 列表
             do
                 command1
                 command2
                 ...
                 commandN
             done
    循环文件夹中的所有文件名称

    for i in `ls`
    do
        echo $i
    done
    
       参考:Shell for循环
       参考:shell中for循环总结
       参考:产生n位数序列如果不够n位的数字前边用0补齐,通过 bash而且不用循环,直接产生n个相同的字符组成的字符串
  • while 循环:用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。
       语法:while command
             do
                 Statement(s) to be executed if command is true
             done
       参考:Shell while循环
  • until 循环:until 循环执行一系列命令直至条件为 true 时停止。until 循环与 while 循环在处理方式上刚好相反。一般while循环优于until循环,但在某些时候,也只是极少数情况下,until 循环更加有用。
       语法:until command
             do
                 Statement(s) to be executed until command is true
             done

       说明:command 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。
       参考:Shell until循环
  • break 和 continue 命令:在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,像大多数编程语言一样,Shell也使用 break 和 continue 来跳出循环。
       说明:break命令允许跳出所有循环(终止执行后面的所有循环)。
             continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
       参考:Shell break和continue命令
  • 函数:函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,Shell 也支持函数。Shell 函数必须先定义后使用。
       语法:function_name () {
                 list of commands
                 [ return value ]
             }
    - or -
             function function_name () {
                 list of commands
                 [ return value ]
             }
       说明:函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。
             Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。
       参考:Shell函数:Shell函数返回值、删除函数、在终端调用函数
  • 函数参数:在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
       说明:$# —— 传递给函数的参数个数。
             $* —— 显示所有传递给函数的参数。
             $@ —— 与$*相同,但是略有区别,请查看Shell特殊变量。
             $? —— 函数的返回值。
       参考:Shell函数参数
  • 输入输出重定向:命令的输出不仅可以是显示器,还可以很容易的转移向到文件,这被称为输出重定向。
       语法:command > file  (输出重定向会覆盖文件内容)
             command >> file  (如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾)

             command > /dev/null  (如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null)
             command > /dev/null 2>&1  (屏蔽 stdout 和 stderr)
       说明:/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到”禁止输出“的效果。
       参考:Shell输入输出重定向:Shell Here Document,/dev/null文件
       参考:2> /dev/null的解释
       参考:Linux下使用Shell脚本向FTP服务器上传或下载一个文件
  • 文件包含:像其他语言一样,Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本。
       语法:.·filename
             source filename

       说明:两种方式的效果相同,简单起见,一般使用点号(.),但是注意点号(.)和文件名中间有一空格。

    ###创建两个脚本,一个是被调用脚本 subscript.sh,内容如下:
    
    url="http://see.xidian.edu.cn/cpp/view/2738.html"
    
    ###一个是主文件 main.sh,内容如下:
    
    #!/bin/bash
    . ./subscript.sh
    echo $url
       参考:Shell文件包含
  • vim 编辑器:Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配。注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Windows 下的 word 有排版功能。
       语法:vim [参数] [文件 ..]
             or
             vim [参数] -
             or
             vim [参数] -t tag
             or
             vim [参数] -q [errorfile]
       参考:vim 编辑器
       参考:linux系统中如何进入退出vim编辑器,方法及区别

  • vi:是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。
      vi编辑器支持编辑模式命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。
       编辑模式切换到命令模式使用“esc”键;
             :wq:在命令模式下,执行存盘退出操作;
             :w:在命令模式下,执行存盘操作;
             :w!:在命令模式下,执行强制存盘操作;
             :q:在命令模式下,执行退出vi操作;
             :q!:在命令模式下,执行强制退出vi操作;
             :e文件名:在命令模式下,打开并编辑指定名称的文件;
             :n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;
             :f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;
             :set number:在命令模式下,用于在最左端显示行号;
             :set nonumber:在命令模式下,用于在最左端不显示行号;
       命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。
       语法:vi(选项)(参数)
       参考:vi命令
       参考:Linux中vi编辑器的使用详解   参考:怎么保存退出vi编辑


 

原文地址:https://www.cnblogs.com/alex-bn-lee/p/4286256.html