3
说明:以下内容为个人学习Linux与Shell的笔记整理,现整理成文章分享给大家,希望能够给各位读者带来帮助。内容上若有不完善的地方,欢迎读者留言指出,笔者会尽快勘正,谢谢!

linux

linux基础与常用命令

  1. Linux 目录结构
目录名 目录的作用
/bin/ 存放系统命令的目录,普通用户和超级用户都可以执行
/sbin/ 存放系统命令的目录,只有超级用户才可以执行
/sbin/ 存放系统命令的目录,只有超级用户才可以执行
/boot/ 系统启动目录,保存了与系统启动相关的文件
/dev/ 设备文件保存位置
/etc/ 配置文件保存位置。/etc/shells 保存了本机支持的shell
/mnt/ 挂载目录
/proc/ 虚拟文件系统,该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核,进程,外部设备状态和网络状态等
  1. stat 查看文件详细信息如:大小,块,权限,访问时间,修改时间,创建时间等
  2. more 命令打开一个用来查看文件内容的交互界面,可以识别一些交互指令。

    • 空格键:向下翻页
    • b:向上翻页
    • 回车键:向下滚动一行
    • /字符串:搜索指定的字符串
    • q:退出。
  3. less 相较于more命令可以向上游览文件也可以向上搜索,查看之前不会加载全文。

    • -N :显示行号
    • -e :文件显示结束后,自动离开
    • -s :显示连续空行为一行
    • -m :显示百分比
  4. head :显示文件开头的命令

    • -n 行数:从文件头开始,显示指定的行数
  5. tail :显示文件结尾的命令

    • -n 行数:从文件尾开始,显示指定的行数
    • -f :显示文件新增的内容
  6. ln命令:在文件之间建立链接

    • -s : 建立软链接文件,若不指定则建立硬链接文件。
    • -f : 强制。如果目标文件已经存在,则删除文件再重新建立链接文件。
    • 软链接类似于快捷方式,硬链接是同一个文件的另一个名称。
  7. 系统命令查找命令

    1. whereis命令:在查找二进制命令的同时,查找帮助文档的位置
    2. which命令 : 在查找二进制命令的同时,如果这个命令有别名,还可以找到别名命令。
  8. locate命令:按照文件名搜索普通文件的命令。

    • 优点:按照数据库搜索,搜索速度快,消耗资源小
    • 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索
    • locate [选项] 匹配符

      * -i 忽略大小写
      * -c 不输出文件名,仅计算找到的文件数量
      * -r 使用正则表达式
      
  9. find:在系统中搜索符合添加的文件名,用法:find 目录 选项 [-exec/-ok] command {} ;

    1. -exec execute执行,直接执行后面的command,不用询问是否执行
    2. -ok 执行后面的command会询问Y/N
    3. {} 表示要执行的命令的参数即为找到的文件,命令末尾必须以 ; 结尾分号不能少
    4. -name 按照文件名称查找
    5. -perm 按照权限查找:-perm 755
    6. -prune 使用此选项可以使find命令不在当前指定的目录中查找】
    7. -type 查找某一类型的文件

       1. type的选项
       2. b 块设备文件
       3. d 目录
       4. c 字符设备文件
       5. f 普通文件
       6. p 管道文件
       7. l 符号链接文件
    8. -amin n 查找系统中最后n分钟访问的文件
    9. -atime n 查找系统中最后n个24小时{即n天前}访问的文件
    10. -cmin n 查找系统中最后n分钟被改变文件状态的文件
    11. -ctime n 查找系统中最后n个24小时{即n天前}被改变文件状态的文件
    12. -mmin n 查找系统中最后n分钟被改变文件数据的文件
    13. -mtime n 查找系统中最后n个24小时{即n天前}被改变文件数据的文件
  10. zip与unzip压缩解压缩zip格式文件。

    1. zip [选项] 压缩包名 源文件或源目录

      * -r :压缩目录
      
    2. unzip [选项] 压缩包名

      * -d :指定解压缩位置
      
  11. gzip和gunzip压缩解压缩gz格式文件

    1. gzip [选项] 源文件。压缩但不打包文件。

      * -c 将压缩数据输出到标准输出中,可以用于保留源文件
      * -d 解压缩
      * -r 压缩目录
      
    2. gunzip 解压缩文件或目录 gzip -d 或者 gunzip
  12. bzip2和bunzip2压缩解压缩bz2格式文件

    1. bzip [选项] 源文件:压缩率比zip格式更高。

      • -d 解压缩
      • -k 压缩时,保留源文件
      • -v 显示压缩的详细信息
    2. bunzip2 解压缩文件或目录 bunzip2 -d 或者 bunzip
    1. tar打包解包tar格式文件

      1. tar 打包不压缩内容 tar [选项] [-f 压缩包名] 源文件或目录

        * -c :打包
        * -f :指定压缩包的文件名
        * -v :显示打包文件过程
        
      2. tar 解打包命令 tar [选项] 压缩包

        * -x :解打包
        * -f :指定解包的文件名
        * -v :显示解包文件过程
        * -t :不解包,只查看包中有哪些文件
      3. tar直接打包压缩解压缩 .tar.gz 和 .tar.bz2格式文件 tar [选项] 压缩包 源文件或目录

        1. -z :支持压缩和解压缩 .tar.gz 格式文件
        2. -j :支持压缩和解压缩 .tar.bz2 格式文件
        
  13. 配置IP地址

    1. 使用setup工具
    2. 手工编辑配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0
修改以后重载网络服务配置 service network restart
  1. ifconfig命令查看IP地址的信息。
  2. netstat命令查看网络状态,既可以看到本机开启的端口,也可以看到有哪些客户端在进行连接。netstat [选项]

    • -a :列出所有网络状态,包括socket程序
    • -c :秒数:指定每隔几秒刷一次网络状态
    • -t :显示使用TCP协议端口的连接状况。
    • -u :显示使用UDP协议端口的连接状况。
    • -l :仅显示处于监听状态的连接。
    • -r :显示路由表。
    • -p :显示PID和程序名。
    • -n :使用IP和端口显示,不使用域名与服务名。
  3. wall命令:给所有登陆用户发送消息,包括自己。
  4. w命令:显示系统中正在登陆的用户的信息,并可以看到用户正在进行的操作。该命令查看的痕迹日志是/var/run/utmp。
  5. last命令:查看系统所有登陆过的用户的信息。包括正在登陆的用户和之前登陆的用户。该命令查看的痕迹日志是/var/log/wtmp。
  6. lastlog命令:查看系统中所有用户的最后一次登陆时间。该命令查看的痕迹日志是/var/log/lastlog。
  7. lastb命令:查看错误登陆的信息。该命令查看的痕迹日志是/var/log/btmp。

shell

shell基本命令

  1. echo:

    • -n:取消输出后行末的换行符号
    • -e:支持反斜线控制的字符转换

      • echo -e "a":输出警告声
      • echo -e "e[1;31m abcd e[0m":输出带颜色的信息
  2. bash执行方法:

    1. 给bash文件添加执行权限,然后通过绝对路径来执行
    2. 给bash文件添加执行权限,然后通过相对路径来执行
    3. 通过 bash命令来执行bash文件
  3. history:历史命令

    1. -c:清空历史命令
    2. -w:把系统缓存中的历史命令写入文件中,默认的历史命令保存文件:~/.bash_history中。(在用户注销时,系统会默认将历史命令写入文件中)
    3. /etc/profile里设置了历史文件命令保存的条数
  4. 历史命令调用:

    1. !n 重复第n条历史命令
    2. !! 重复执行上一条命令
    3. !字串 重复执行最后一条命令以该字符串为开头的命令
    4. !$ 重复上一条命令的最后的参数
  5. 命令别名

    1. alias 查询命令别名
    2. alias 别名=‘原命令’
    3. 别名永久生效:写入~/bashrc
    4. 命令执行优先级

      1. 使用绝对路径或相对路径
      2. 别名
      3. Bash的内部命令
      4. $PATH环境变量定义的目录去查找
  6. source:使shell读入指定的Shell程序文件并依次执行文件中的所有语句。(.)点命令,只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。
  7. Bash常用快捷键

    1. ctrl+A:光标移动到命令行开头
    2. ctrl+E:光标移动到命令行结尾
    3. ctrl+U:删除或剪切光标之前的命令
    4. ctrl+K:删除或剪切光标之后的命令
    5. ctrl+Y:粘贴
    6. ctrl+R:在历史命令中搜索
  8. 重定向

    1. > 正确输出
    2. >>正确输出追加
    3. 2> 错误输出
    4. 2>> 错误输出追加
    5. < 输入重定向
    6. << 输入重定向,指定一个分界符号

9.多命令执行符号

多命令执行符号 格式 作用
: 命令1:命令2 多个命令顺序执行,命令之间没有任何逻辑联系
&& 命令1 && 命令2 当命令1正确执行,命令2才会执行,当命令1不正确执行,则命令2不会执行
ll 命令1 ll 命令2 当命令1正确执行,命令2不会执行,当命令1不正确执行,则命令2才会执行
  1. wc统计文本行数 字数 字符数

    1. -c显示字符的个数
    2. -w显示单词的个数
    3. -l显示文件文本的行数
  2. grep:grep [选项] "搜索内容" 文件名

    1. -A 数字:列出符合条件的行,并列出后续的n行
    2. -B 数字:列出符合条件的行,并列出前面的n行
    3. -C 数字:列出符合添加的行,并列出前面后续的n行
    4. -c :统计找到符合条件的字符串的次数
    5. -i :忽略大小写
    6. -n :输出行号
    7. -v :反向查找
    8. --color=auto 搜索出的关键字用颜色显示
  3. find:在系统中搜索符合添加的文件名,用法:find 目录 选项 [-exec/-ok] command {} ;

    1. -exec execute执行,直接执行后面的command,不用询问是否执行
    2. -ok 执行后面的command会询问Y/N
    3. {} 表示要执行的命令的参数即为找到的文件,命令末尾必须以 ; 结尾分号不能少
    4. -name 按照文件名称查找
    5. -perm 按照权限查找:-perm 755
    6. -prune 使用此选项可以使find命令不在当前指定的目录中查找】
    7. -type 查找某一类型的文件

      1. type的选项
      2. b 块设备文件
      3. d 目录
      4. c 字符设备文件
      5. f 普通文件
      6. p 管道文件
      7. l 符号链接文件
    8. -amin n 查找系统中最后n分钟访问的文件
    9. -atime n 查找系统中最后n个24小时{即n天前}访问的文件
    10. -cmin n 查找系统中最后n分钟被改变文件状态的文件
    11. -ctime n 查找系统中最后n个24小时{即n天前}被改变文件状态的文件
    12. -mmin n 查找系统中最后n分钟被改变文件数据的文件
    13. -mtime n 查找系统中最后n个24小时{即n天前}被改变文件数据的文件
  4. Bash中的特殊符号
符号 作用
‘’ 单引号,在单引号中的所有特殊符号都没有特殊含义,例如$
"" 双引号,在双引号中,$,`,\具有特殊功能
${} 和双引号一样
`` 反引号,反引号括起来的是系统命令,在Bash中会先执行它
$() 和反引号一样
$(()) 括号里的内容要进行数学运算
$[] 括号里的内容要进行数学运算
() 用于执行一系列的shell命令,在子bash中执行
{} 用于执行一系列的shell命令,在该bash中执行
[] 用于变量测试
# #开头的行代表注释
$ 用于调用变量的值
\ 转义符,跟在后的特殊符号将失去特殊含义,变为普通字符
  1. pstree:查看系统进程树
  2. Bash的变量和运算符

    1. Bash中变量的默认类型都是字符串类型,若要进行数值运算,则必须指定变量类型为数值型
    2. 变量用等号连接值,等号两边不能加空格,若值字符串有空格,用单引号或双引号包括。
    3. 变量的叠加:test="$demo"1234或test=${demo}1234
  3. 变量分类

    1. 用户自定义的变量,只在当前shell中生效
    2. 环境变量:保存了和系统操作环境相关的数据,便于与命令区分,一般环境变量为大写。可以在子shell中生效
    3. 位置参数变量:主要用于向脚本当中传递参数或数据
    4. 预定义便变量:是Bash中已经定义好的变量,变量名不能自定义,作用也是固定的。
  4. set:设置当前所使用 shell 的执行方式,同时也可以用来设置或显示 shell 变量的值。set [选项]

    • set -u 当执行时使用到未定义过的变量,则显示错误信息
    • set -x 在执行命令之前,会先将命令输出一次
    • set 查看变量的值,也可以查看用于自定义的命令
    • unset 删除变量名,unset -v 删除变量 unset -f 删除函数
  5. PS1变量:命令提示符设置

    1. d 显示日期
    2. h 显示简写的主机名
    3. t 显示24小时制时间,格式”HH:MM:SS“
    4. u 显示当前用户名
    5. v 显示Bash版本的信息
    6. # 执行的第几个命令
    7. w 显示当前所在目录的完整名称
    8. &dollar; 示符,root显示#,普通用户显示$
  6. LANG 语系变量,定义了Linux系统的主语系环境。locale 可以查询当前系统支持的语系。
  7. 位置参数变量
位置参数变量 作用
&dollar;n n为数字,&dollar;0代表命令本身,&dollar;1-&dollar;9代表第一个到第九个参数,十个以上的参数需要用大括号包含,如${10}
$* 这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,$@把每个参数区分对待
$# 这个变量也代表命令行中所有参数的个数
  1. 预定义变量
预定义变量 作用
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一次命令正确执行
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号
  1. 接收键盘输入 read [选项] [变量名]

    • -p "提示信息" :在等待read输入时,输出提升信息
    • -t 秒数:read命令一直等待用户输入,使用此选项可以指定等待时间
    • -n 字符数:read命令只接受指定的字符数,就会执行
    • -s 隐藏输入的数据,适用于机密信息的输入
  2. 数值运算方法

    1. 使用declare声明变量类型,**declare +/- 变量名

      • -:给变量设定类型属性
      • +:取消变量的类型属性
      • -a:将变量声明为数组类型
      • -i:将变量声明为整数类型
      • -r:将变量声明为只读变量。
      • -x:将变量声明为环境变量
      • -p:显示指定变量的被声明的类型
    2. 使用expr命令或let命令

      • dd=&dollar;(expr &dollar;aa + $bb) +号两边必须有空格
      • dd=let $a+$b
    3. $(())或\$[] 括号里的内容要进行数学运算

      • dd=$(($aa+$bb))
  3. export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。最终还是使用declare -x 实现。
  4. 变量测试与内容置换
变量置换方式 变量y没有设置 变量y为空值 变量y有值
x=${y-新值} x=新值 x为空 x=$y
x=${y:-新值} x=新值 x=新值 x=$y
x=${y+新值} x为空 x=新值 x=新值
x=${y:+新值} x为空 x为空 x=新值
x=${y=新值} x=新值 y=新值 x为空,y值不变 x=$y,y值不变
x=${y:=新值} x=新值 y=新值 x=新值,y=新值 x=$y,y值不变
x=${y?新值} 新值输出到标准错误输出 x为空 x=$y
x=${y:?新值} 新值输出到标准错误输出 新值输出到标准错误输出 x=$y
  1. 登录时相关的环境变量配置文件

    1. 配置文件

      • /etc/profile
      • /etc/profile.d/*.sh
      • ~/.bash_profile
      • ~/.bashrc
      • /etc/bashrc
    2. 启动过程

      • 正常登录文件顺序加载过程
    ![image](https://user-gold-cdn.xitu.io/2020/5/13/1720dfd95914133f?w=979&h=330&f=png&s=17284)
    * 不正常启动(su命令切换用户)
    ![image](https://user-gold-cdn.xitu.io/2020/5/13/1720dfd95a7b14c7?w=839&h=421&f=png&s=17723)
    
    
    1. 其他配置文件

      1. 注销时生效的配置文件:用户退出登录时,会调用~/.bash_logout,这个文件默认没有写入任何内容
      2. Shell登录信息:/etc/issue是Linux系统开机启动时在命令行界面弹出的欢迎语句文件,/etc/issue.net是ssh远程登录时在命令行界面弹出的欢迎语句文件。
    1. 定义Bash的快捷键

      • stty -a 查询所有的快捷键
      • stty 关键字 快捷键 更改快捷键

    字符串处理

    1. grep

      • -n 打印行号
      • -v 不包括,反向过滤
      • -E 使用扩展的正则表达式
      • -i 忽略大小写
      • -c 统计文中出现的次数
      • -A 打印匹配行后N行
      • -B 打印匹配行前N行
      • -C 打印匹配行前后N行
    2. cut 列提取命令 **cut [选项] 文件名

      • -f 列号 :提取第几列,可以提供多个列,列号之间用逗号隔开。
      • -d 分隔符:按照指定分隔符分割列,默认使用制表符作为分隔符。
      • -c 通过字符范围来进行字段提取。“n-”表示提取从第n个字符到行尾,“n-m”:从第n个字符
    3. printf 格式化输出 prinf ‘输出类型 输出格式’ 输出内容

      • 输出类型

        • %ns:输出字符串 n是数字代表输出几个字符
        • %ni:输出整数,n是数字代表输出几个数字
        • %m.nf:输出浮点数。m和n是数字,代表输出的整数位数和小数位数
      • 输出格式

        • a:输出警告音
        • f:清空屏幕
        • n:换行
        • r:回车
    4. awk对输入文件中的每一行都执行这个脚本: awk '条件1{动作1} 条件2{动作2} 条件3{动作3}' 文件名。awk 先读取一行,然后再执行每一个动作条件。

      • -F 指定分隔符,可使用正则表达式。分割后的第N个字段存放到$N中。$0代表整行,NF记录了字段数量,NR记录了行数,RS记录了分隔符。
      • BEGIN和END模块,在处理输入文件之前会执行BEGIN模块。处理输入文件之后会执行END模块。**awk ‘BEGIN {} {} END{}’
      • 正则表达式

        • awk ‘/regex/{动作}’用来匹配行。
        • awk '$N ~ /regex/ {动作}' 或wk '$N !~ /regex/,用来匹配每一行的字段,判断符合或者不符合正则条件。
      • awk条件支持 > < >= <= == !=等运算符。
      • if-else 语句
      awk ‘$2 > 6{n=n+1;pay=pay+$2+$3} 
          END {  if(n>0)
                  print n,"total pay is",pay
              else 
                  print "no employees"
      }’
      • while语句
      awk '
      {
          i=1 
          while(i<=$3){
              i=i+1;
          } 
      }
      END {
          print i
      }
      '
      • for语句
      awk '
          {
              for(i=1;i<=$3;i=i+1)
                  printf("\t",i)
          }
      '
      • awk支持数组,内置函数。
    5. sed:用来对数据进行选取,替换,删除和新增的命令,命令格式:sed [选项] ‘[动作]’ 文件名

      1. 选项

        • -n :sed命令会把所有的数据都输出,此选项只会把sed处理的行输出。
        • -e :运行执行多个动作,各个动作直接用 ; 分割 sed [选项] -e ‘动作1 ;动作2’
        • -i :sed命令对文件的的处理默认重新输出而不会修改文件内容,该选项会将处理后的内容写回文件
      2. 动作

        • a :追加,在指定行后添加一行或多行 sed '1,3a newContent' filePath :在第 1~3行后面各新增内容。
        • i :插入,在指定行前添加一行或多行 sed '1,3i newContent' filePath :在第 1~3行前面各新增内容。
        • d :删除,删除指定行 sed ‘1,4d’ filePath :删除1~4行的内容。
        • p :打印,打印指定的行。
        • c :行替换,将指定行替换为指定内容 sed ‘1,4c newContent’ filePath :将1~4行的内容替换为指定内容。
        • s :字符串替换,结合正则表达式,将字符串替换成另一个字符串。 sed ‘1,3s/regex/new/g’ :将1~3行中的符合正则表达式的字符串替换为new,g代表1~3行内符合正则表达式的都替换,可将g改为数字n,代表仅替换第k个符合条件的字符串。
    6. sort 排序命令 **sort [选项] 文件名

      • -f :忽略大小写
      • -b :忽略每行前的空白部分
      • -n :以数值型进行排序,默认使用字符串类型
      • -r :反向排序
      • -u :删除重复的行
      • -t :指定分割符对每一行进行分割,默认使用制表符,
      • -k :-k 3,7 配合-t分割后,选择第3~7个字段进行排序。
    7. uniq 用来取消重复行,类似于 sort -u uniq [选项] 文件名

      • -i 忽略大小写
    8. wc 统计命令 wc [选项] 文件名

      • -l :只统计行数
      • -w :只统计单词数
      • -m :只统计字符数
    9. 条件判断,格式: test 选项 值 或者 [ 选项 值 ]

      1. 按照文件类型进行判断
    | 测试选项 |  作用|
    | --- | --- |
    | -b 文件 |  判断该文件是否存在,且是否为块设备文件|
    | -c 文件 |  判断该文件是否存在,且是否为字符设备文件|
    | -d 文件 |  判断该文件是否存在,且是否为目录文件|
    | -e 文件 |  判断该文件是否存在,|
    | -f 文件 |  判断该文件是否存在,且是否为普通文件|
    | -L 文件 |  判断该文件是否存在,且是否为符号链接文件|
    | -p 文件 |  判断该文件是否存在,且是否为管道文件|
    | -s 文件 |  判断该文件是否存在,且是否为非空|
    | -S 文件 |  判断该文件是否存在,且是为套接字文件|
    
    示例:[ -f ip.txt ] && echo ”is file“||echo ”not a file。
    
    2. 按照文件权限进行判断  
     
    | 测试选项 |  作用 |
    | --- | --- |
    | -r 文件 |  判断该文件是否存在,且是否该文件有读权限|
    | -w 文件 |  判断该文件是否存在,且是否该文件有写权限|
    | -x 文件 |  判断该文件是否存在,且是否该文件有执行权限|
    | -u 文件 |  判断该文件是否存在,且是否该文件拥有SUID权限|
    | -g 文件 |  判断该文件是否存在,且是否该文件拥有SGID权限|
    | -k 文件 |  判断该文件是否存在,且是否该文件拥有SBit权限|
    
    3. 两个文件之间比较
    
    | 测试选项 |  作用|
    | --- | --- |
    |文件1 -nt 文件2 | 判断该文件1的修改时间是否比文件2的新。|
    |文件1 -ot 文件2|  判断该文件1的修改时间是否比文件2的旧。|
    |文件1 -ef 文件2|  判断该文件1和文件2的Inode号一致。可以用来判断两个文件是否是同一个文件|
    
    4. 两个整数之间的比较
    
    | 测试选项 |  作用 |
    | --- | --- |
    |整数1 -eq 整数1 | 判断整数1是否和整数2相等|
    |整数1 -ne 整数2|  判断整数1是否和整数2不相等|
    |整数1 -gt 整数2|  判断整数1是否大于整数2|
    |整数1 -lt 整数2|  判断整数1是否小于整数2|
    |整数1 -ge 整数2|  判断整数1是否大于等于整数2|
    |整数1 -le 整数2|  判断整数1是否小于等于整数2|
    
    5. 字符串判断
    
    | 测试选项 |  作用|
    | --- | --- |
    |-z 字符串 | 判断字符串是否为空|
    |-n 字符串|  判断字符串是否为非空|
    |字符串1 == 字符串2|判断字符串1和字符串2是否相等|
    |字符串1 != 字符串2|判断字符串1和字符串2是否不相等|
    6. 多重条件判断
    
    | 测试选项 |  作用|示例|
    | --- | --- | -- |
    |判断1 -a 判断2 | 逻辑与|[-n $"aa" -a $"aa" -gt 23 ]|
    |判断1 -o 判断2 | 逻辑或|[-n $"aa" -o $"aa" -gt 23]|
    |!判断2 | 逻辑非|[! -n $"aa" ]|
    
    

    流程控制

    1. if 条件判断

      1. 单分支if条件语句
          if [ 条件判断式 ];then
              程序
          fi
         
         
          if [ 条件判断式 ]
              then
                  程序
          fi
      1. 双分支if条件语句
          if [ 条件判断式 ]
              then 
                  条件成立时执行的语句
              else
                  条件不成立时执行的语句
          fi
    
    3. 多分支if条件语句
    ```bash
        if [ 条件判断式 ]
            then 
                程序
        elif [ 条件判断式 ]
            then 
                程序
        else
            程序
        fi
    ```
    
    1. 多分支case条件语句
    case $variable in 
        "value1")
            echo "变量值等于value1"
            ;;
        "value2")
            echo "变量值等于value2“
            ;;
        "value3")
            echo ”变量值等于value3“
            ;;
        *)
            echo "都不符合”
            ;;
    esac
    1. for循环语法格式
        for i in 值1 值2 值3 ···
            do
                程序
            done
        for ((初始值;循环控制条件;变量变化))
            do
                程序
            done
    1. while循环语法格式
       while [ 条件表达式 ]
        do
            程序
        done
    1. until循环:一旦条件成立则终止循环。
    until [ 条件判断式 ] 
        do
            程序
        done
    1. 函数
    function 函数名 () {
        程序
    }
    1. 特殊流程控制语句。

      1. exit语句。shell脚本里的exit语句是用来退出当前脚本的。 exit [返回值] ,返回值可以通过$?来查询这个返回值。
      2. break语句:结束当前循环,从整个循环流程中跳出。
      3. continue语句:结束当前单次循环,继续下一次循环。

    jian
    282 声望210 粉丝