千家信息网

Unix Shell脚本编程知识点总结及范例

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,脚本编程语言与编译型语言:脚本编程语言:(Bash)脚本编程语言通常是解释型(interpreted),主要由解释器(interpreter)读入程序代码,并将其转换成内部的形式加以执行。优点:能够轻
千家信息网最后更新 2026年11月03日Unix Shell脚本编程知识点总结及范例

脚本编程语言与编译型语言:

  1. 脚本编程语言:(Bash)

  2. 脚本编程语言通常是解释型(interpreted),主要由解释器(interpreter)读入程序代码,并将其转换成内部的形式加以执行。

  3. 优点:

  4. 能够轻易处理文件与目录之类的对象。

  5. 缺点:

  6. 运行效率通常不如编译型语言

  7. 编译型语言:(C、C++、Java、Fortran、Ada、Pascal)

  8. 编译型语言多半运作于底层,所处理的是字节、整数、浮点数或其它及其机器层经的对象。

SHELL脚本的基本语法格式:

  1. 脚本必须以#!开头:(# cat /etc/shells)

  2. 例如#!/bin/bash(解释器)

  3. # 其中间可以添加一些注释信息,例如脚本的使用方法、脚本的功能、创建日期、作者等相关信息

  4. 然后赋予脚本具有执行权限,# chmod +x scripts.sh

  5. 执行则使用./scripts.sh ##也可以将此脚本的路径添加到PATH变量中,以后直接使用脚本名称直接运行。

  6. 脚本的测试工具bash:

  7. -n:检查脚本是否有语法错误,有则显示错误信息,否则无信息(没有消息才是最好的消息)

  8. -x:检查脚本在执行中的详细过程(排错时,经常会用到)

  9. exit:退出脚本(其数值为0-255)

  10. 如果脚本没有明确定义退出码,那么在执行脚本结束前的退出码为此脚本的退出码。

  11. # echo $? ##查看上一个命令执行结果所显示的状态码

SHELL脚本的逻辑关系总结:

  1. 逻辑与:符号为&&:

  2. 如果其中一个为假,则结果一定为假

  3. 如果第一个条件结果为假,则第二个条件不用再判断,最终结果已显示

  4. 如果第一个条件结果为真,则第二个条件必须判断

  5. 范例:

  6. # useradd redhat && echo "redhat" | passwd --stdin redhat
    解说:如果useradd redhat执行成功,则继续执行下一条命令,否则终止。

  1. 逻辑或||:

  2. 如果其中一个条件结果为真,则结果一定为真,不用检查后面的语句

  3. 如果其中一个条件结果为假,则检查下一个条件语句

  4. 范例:

  5. # id redhat || useradd redhat

  6. 解说:如果redhat用户存在,就显示redhat用户相关信息,否则添加此账户。

  7. 逻辑与和逻辑或联合使用范例:

  8. # id redhat && echo "redhat already existing" || useradd redhat

  9. 解说:如果redhat用户存在,则显示redhat用户已存在,否则添加此账户。

条件判断语句总结:

  1. 单分支if语句双分支if语句 多分支if语句case选择语句

  2. if 判断条件 ;then if 判断条件;then if 判断条件;thencase $1 in

  3. statement statement statement string)

  4. ...... ........ ......... statement;;

  5. fi else elif 判断条件;then string2)

  6. statement statement statement;;

  7. ..... ......... ......)

  8. fi elif 判断条件;then statement;;

  9. statement esac

  10. .........

  11. else

  12. statement

  13. fi

范例:

  1. 脚本分析:

  2. 主要功能:传递一个不同的参数,来完成用户的创建、添加密码、删除用户。

  3. 详细说明:

  4. 当我们传递--add参数给此脚本时,此脚本为完成指定用户的添加,如果添加的用户存在,则提示用户以存在,否则添加指定用户并创建以用户为自身的密码;

  5. 当我们传递--del参数给此脚本时,此脚本会删除我们指定的用户,如果存在则删除此用户,否则提示用户不存在。

  6. 当我们传递--help参数给此脚本时,此脚本会给我们现实脚本的使用方法。

  7. 当我们传递其它参数时,会提示无法识别的选项。


POSIX的结束状态总结:

  1. 0: ##命令成功所显示的状态

  2. >0: ##在重定向或单词展开期间(~、变量、命令、算术展开及单词切割)失败

  3. 1-125 ##命令不成功所显示的状态。

  4. 126 ##命令找到了,但文件无法执行所显示的状态

  5. 127 ##命令找不到,所显示的状态

  6. >128 ##命令因收到信号而死亡

替换运算符总结(变量的赋值):

  1. ${varname:-word}

  2. 如果varname存在且非null,则返回其值;否则,返回word;

  3. 用途:如果变量未定义,则返回默认值

  4. 范例:如果count未定义,则${count:-0}的值为0

  5. ${varname:=word}

  6. 如果varname存在且非null,则返回其值;否则,将varname设置为word,并返回其值;

  7. 用途:如果变量未定义,则设置变量为默认值

  8. 范烈:如果count未定义,则${count:=0}的值为0

  9. ${varname:+word}

  10. 如果varname存在且非null,则返回word;否则,返回null;

  11. 用途:为测试变量的存在

  12. 范例:如果count已定义,则${count:+1}的值为1

  13. ${varname:?message}

  14. 如果varname存在且非null,则返回其值;否则显示varname:message,并退出当前命令或脚本;

  15. 用途:为了捕捉由于变量未定义所导致的错误。

  16. 范例:如果count未定义,${count:?"undefined!"}则显示count:undefined!

模式匹配运算符总结:

  1. 假设path变量的值为:/etc/sysconfig/network-scripts/ifcfg-eth0.text.bak

  2. ${variable#pattern}:

  3. 如果模式匹配于变量值的开头处,则删除匹配的最短部分,并返回剩下的部分;

  4. 范例:echo ${path#/*/}的值为etc/sysconfig/network-scripts/ifcfg-eth0.text.bak

  5. ${variable##pattern}

  6. 如果模式匹配于变量值的开头处,则删除匹配的最长部分,并返回剩下的部分;

  7. 范例:echo ${path##/*/}的值为ifcfg-eth0.text.bake

  8. ${variable%pattern}

  9. 如果模式匹配于变量的结尾处,则删除匹配的最短部分,并返回剩下的部分;

  10. 范例:echo ${path%.*}的值为/etc/sysconfig/network-scripts/ifcfg-eth0.text

  11. ${variable%%pattern}

  12. 如果模式匹配于变量的结尾处,则删除匹配的最长部分,则返回剩余部分。

  13. 范例:echo ${path%%.*}的值为/etc/sysconfig/network-scripts/ifcfg-eth0

  14. ${#variable}

  15. 显示variable变量值的字符长度

Shell脚本常用的循环语句总结:

  1. for循环 while循环 until循环

  2. for 变量 in 列表 ;do while condition(条件);do until condition ;do

  3. command... statements statements

  4. done done done


  5. while循环:只要condition满足条件,while会循环

  6. until循环:只要condition不满足条件,until会循环

test命令

  1. test命令可以处理shell脚本中的各类工作,它产生的不是一般输出,而是可使用退出状态,test接受各种不同的参数,可控制它要执行哪一种测试

  2. 语法:

  3. test [ expression ]

  4. test [ [expression] ]

  5. 用途:

  6. 为了测试shell脚本里的条件,通过退出状态返回其结果。

  7. 行为模式:

  8. test用来测试文件的属性、比较字符串、比较数字

  9. 主要选项与表达式:

  10. string string不是null

  11. -b file file是块设备文件(-b)

  12. -c file file是字符设备文件(-c)

  13. -d file file为目录(-d)

  14. -e file file是否存在

  15. -f file file是一般文件(-)

  16. -g file file有设置它的setgid位

  17. -h file file是一个符号链接

  18. -r file file是可读的

  19. -s file file是socket

  20. -w file file是可写的

  21. -x file file是可执行的,或file是可被查找的目录

  22. s1 = s2 s1与s2字符串相同

  23. s1 != s2 s1与s2字符串不相同

  24. n1 -eq n2 整数n1与n2相等

  25. n1 -ne n2 整数n1与n2不相等

  26. n1 -lt n2 整数n1小于n2

  27. n1 -gt n2 整数n1大于n2

  28. n1 -le n2 整数n1小于或等于n2

  29. n1 -ge n2 整数n1大于或等于n2

  30. -n string string是非null

  31. -z string string为null特殊参数变量

  32. 在bash shell中有些特殊变量,它们会记录命令行参数的个数。例如$#

  33. 你可以只数一下命令行中输入了多少个参数,而不同测试每个参数。bash为此提供了一个特殊的变量,就是上面所提到的$#

  34. $#的说明

    1. $#特殊变量含有脚本运行时就有的命令行参数的个数。你可以在脚本中任何地方来调用这个特殊变量来调用$#来计算参数的个数

  35. 范例:

    1. vim Count.sh

      #!/bin/bash

      #Script Name: Count.sh

      # Count Parameters number


      echo There were $# parameters.


      chmod +x Count.sh

      ./Count.sh 1 2 3

      There were 3 parameters.



下面来说下${!#}的作用?
既然$#变量含有参数的总数量,那么${!#}可以调用最后一个参数的变量名称。
范例:
vim Count-1.sh
#!/bin/bash
#Script Name: Count-1.sh
# Print last parameter
params=$#
echo "The last parameter is "$params"
echo "The last parameter is "${!#}"
:wq


chmod +x Count-1.sh
./Count-1.sh 1 2 3
The last parameter is 3
The last parameter is 3

















脚本 变量 条件 参数 命令 用户 范例 结果 状态 语句 部分 循环 整数 语言 文件 模式 测试 特殊 信息 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融科技 南京欣网互联网络科技 百单网互联网科技有限公司 广东万易互联网科技有限公司惠州分公司 上海睿民互联网科技有限公司 广州百单互联网科技有限公司 互联网巨头反垄断金融科技 科技互联网技术 北京互联网科技 唐信互联网科技 大连 互联网科技美容 成都玖崟互联网科技有限公司乐商圈怎么样 米聚互联网科技南京有限公司排面 广东工业互联网大赛深圳学泰科技 抖集互联网科技技术咨询 云鲸互联网络科技有限公司 普陀区互联网教育科技管理办法 互联网科技新闻 求路客互联网科技电话 科技美学互联网 艺术 互联网科技工作委员会 汇久创客互联网科技 成都狮子座互联网科技 互联网科技教育视频 济南有互联网科技公司吗 上海钢联属于互联网科技股吗 福仕德教育科技互联网 米泉互联网科技专业怎么样 北京瑞云互联网科技有限公司 利用互联网等科技手段
0