shell脚本编程(学习笔记)

    科技2022-07-21  119

     shell脚本的本质  —— shell脚本语言是解释型语言  —— shell脚本的本质         shell命令的有序集合           shell编程的基本过程     基本过程分为三步:     1、建立shell文件(以.sh结尾)     例:         vi shell1.sh         date     2、赋予shell文件执行权限         用chmod命令修改权限             chmod 740 shell1.sh     3、执行shell文件         直接在命令行上调用shell程序         ./shell1.sh           shell变量  ——shell允许用户建立变量存储数据,但不支持数据类型(整型、字符、  浮点型),将任何赋给变量的值都解释为一串字符          用户自定义变量     —— 在shell编程中通常使用全大写变量,方便识别         COUNT=1     —— 变量的调用:在变量前加$         echo $COUNT     —— Linux Shell/bash从右向左赋值         Y=y         X=$Y         echo $X         y     —— 使用unset命令删除变量的赋值         Z=hello         echo $Z         hello         unset Z         echo $Z         没有值          位置变量     —— $0    与键入的命令行一样,包含脚本文件名     —— $#    包含命令行参数的个数     —— $@    包含所有命令行参数     —— $?    包含前一个命令的退出状态     —— $*    包含所有命令行参数     —— $$    包含正在执行进程的ID号          环境变量     可通过export或env来查看     常见环境变量         HOME:/ect/passwd文件中列出的用户主目录         IFS:Internal File Separator,默认为空格,tab及换行符         PATH:shell搜索路径         PS1,PS2:默认提示符($)及换行提示符(>)         TERM:终端类型,常用的有vt100,ansi,vt200,xterm等

     shell功能性语句     shell程序由零或多条shell语句构成。shell语句包括三类:说明性语句、     功能性语句和结构性语句。     —— 说明性语句:         以#号开始到结束,不被解释执行         #!/bin/bash这句话告诉OS用那种类型的shell来解释执行该程序     —— 功能性语句:         任意的shell命令、用户程序或其他shell程序     —— 结构性语句:     条件测试语句、多路分支语句、循环语句、循环控制语句等。        read语句  —— read var     echo $var     输入什么输出什么       expr命令(运算符两边要有空格)  —— 算术运算命令包括+、-、\*、/、%     expr 12 + 5 \* 3     27       test语句(0为真)  —— test语句可测试三种对象:         字符串    整数    文件属性  —— 每种测试对象都有若干测试操作符  —— 例如:         test "$answer" = "yes"         变量answer的值是否为字符串yes         test -d tmp         测试tmp是否为一个目录名         test $num -eq 18         变量num的值是否为整数18          字符串测试         s1 = s2 测试两个字符串的内容是否完全一样         s1 != s2 测试两个字符串的内容是否有差异         -z s1  测试s1字符串的长度是否为0         -n s1  测试s1字符串的长度是否不为0     整数测试         a -eq b 测试a与b是否相等         a -ne b 测试a与b是否不相等         a -gt b 测试a是否大于b         a -ge b 测试a是否大于等于b         a -lt b 测试a是否小于b         a -le b 测试a是否小于等于b     文件类型测试     -d name    测试name是否为一个目录     -e name 测试一个文件是否存在     -f name 测试name是否为普通文件     -L name 测试name是否为符号链接     -r name 测试name文件是否存在且为可读     -w name 测试name文件是否存在且为可写     -x name 测试name文件是否存在且为可执行     -s name 测试name文件是否存在且长度不为0     f1 -nt f2 测试文件f1是否比文件f2更新     f1 -ot f2 测试文件f1是否比文件f2更旧       条件语句(0为真)  if...then...fi  语法结构     if 表达式             then    命令表     fi     ——如果表达式为真,则执行命令表中的命令;否则退出if语句,执行      fi后面的语句 —— if和fi是条件语句的语句括号,必须成对使用 —— 命令表中的命令可以是一条,也可以是若干条         例:if [ -f $1 ]             then                 echo "File $1 exists"             fi                  if...then...else...fi     语法结构:         if    表达式         then    命令表1         else    命令表2     fi    多路分支语句  case...esac     多路分支语句case用于多重条件测试,语法结构清晰自然,其语法为:     case    字符串变量    in         模式1)             命令表1             ;;         模式2|模式3)             命令表2             ;;         ......         模式n)             命令表n             ;;     esac       循环语句for  当循环次数已知或确定时,使用for循环语句来执行一条或一组命令。  格式为:  for    变量名    in    单词表         do             命令表         done  变量依次取单词表中的各个单词,每取一次单词,就执行一次循环体中的  命令,循环次数由单词表中的单词数确定。命令表中的命令可以时一条,  也可以是由分号或换行符分开的多条。    循环语句while  语法结构:         while 命令或表达式             do                  命令表             done                  

    Processed: 0.012, SQL: 8