2.4、shell脚本编程

shell及shell脚本
1、shell — 命令解释器
2、shell脚本 — 将多个命令有序的结合起来,命令的有序集合

注意事项:Shell对格式有严格要求比如空格以及一些标点符号

shell编程 #注释

shell脚本创建过程:—解释性的编程语言,不需要编译

  1. 创建文件 touch text.sh
  2. 赋予执行权限 chmod 777 text.sh
  3. 写入一行 #!/bin/bash #shell使用解释器

变量 特点
1.没有数据类型
2.所有的数据均解释为字符串
3.所有变量的引用均是字符串替换

用户自定义变量
1.定义和赋值 A= a123 变量名使用大写,与等号没有空格,赋值数据可以有空格
2.使用 $A
3.清除变量 unset A #清除定义和值

位置变量

  1. 以$开头,$0-$9
  2. $0 命令本身 例如 ls 不跟参数
  3. $1 第一个参数作用:运行时传递参数;函数参数传递
  4. $# 命令行参数的个数
  5. $* $@ 表示命令行说有的参数
  6. $? 上一个命令的执行状态 0正常退出 非0 异常退出
  7. $$ 获得当前脚本的PID 环境变量—不需要定义
    7.1.USER 用户名
    7.2.PATH shell的搜索路径 预定义变量—运维,系统维护使用

*功能性语句
1、输出语句: C – printf S – echo
2、 输入语句: C – scanf S – read #读终端输入值放入变量
read 变量列表 #读终端输入值放入变量列表,多个变量。输入空格隔开,如果超过变量数,多的放在最后一个
3、算数运算命令:expr 支持 + - * / %(必须是整型)
使用 expr 表达式 = 两边紧挨内容 C=expr $A + $B #—将A和B的值相加赋给C
4、 测试指令:

  1. : 字符串测试
    s1 = s2 测试两个字符串的内容是否完全一样
    s1 != s2 测试两个字符串的内容是否有差异
    -z s1 测试s1 字符串的长度是否为0
    -n s1 测试s1 字符串的长度是否不为0
  2. : 整数测试
    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
    note: test语句执行成功(满足条件) 返回结果0 失败返回1
  3. : 文件测试
    -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更旧

test f1 -nt f2
$? = 1

结构性语句
1、分支结构

 if [  条件  ]    
 then        
 	命令块    
 fi        
 if [  条件  ]    
 then        
 	命令块 1    
 else        
 	命令块 2    
 fi        
 if [  条件  ]    
 then        
 	命令块 1    
 else        
	 if [    ]        
	 	then 
	                    
	 fi    
 fi  

2、多路分支:

case 选择条件  in          
匹配条件1)           
 语句块           
  ;;        
  匹配条件1)           
   语句块            
   ;;
   ....        *)              
   语句块  匹配其他           
    ;;    
    esac

3、循环结构:
结构1:

for 变量名  in  变量列表    
do        
	循环语句块    
done

read

结构2:

 for (( i=0;i<10;i++  ))    
 	do        

 done

while:

while [ 条件 ]   
 do        
 命令块    
 done   

seq命令:构造数列,seq 起始数 增量 终止值

 seq  0  2  100
 until:    
 until [ 条件 ]   
  do        
  命令块    
  done

break;continue;
break n;continue n;
跳出n层

函数
定义:
方式1:

func()    {        
命令块  ---至少有一句,不能为空    
}    

方式2:

function  func()    {        
命令块    
}     

函数调用
函数名
方式1: func 参数传递 函数名 参数列表

  func 1 2 3          
  func() {                  
  echo  $1,                  
  echo  $2,                  
  echo  $3            
  }    

方式2:
使用命令置换
C=func 参数列表

脚本中,默认方式定义的变量都是全局变量。
局部变量的定义 需要用 local 修饰

练习
1.输入n个数,求和?# 功能描述:输入n个数,求和

2.打印当前目录中所用的普通文件。

3.删除指定目录中所有的空文件。

猜你喜欢

转载自blog.csdn.net/qq_41110647/article/details/106316092