shell编程语言

变量不需要声明,初始化不需要指定类型

变量命名

1、只能使用数字,字母和下划线,且不能以数字开头

2、变量名区分大小写

注意:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格

显示变量值使用echo命令(类似于java中的system.out) ,加上$变量名,也可以使用${变量名}


变量分类:

Shell变量有这几类:本地变量、环境变量、局部变量、位置变量、特殊变量。

本地变量:

  1. 只对当前shell进程有效的,对当前进程的子进程和其它shell进程无效。
  2. 定义:VAR_NAME=VALUE
  3. 变量引用:${VAR_NAME} 或者 $VAR_NAME
  4. 取消变量:unset VAR_NAME
  5. 相当于java中的私有变量(private),只能当前类使用,子类和其他类都无法使用

局部变量:

  1. 在函数中调用,函数执行结束,变量就会消失
  2. 对shell脚本中某代码片段有效
  3. 定义:local VAR_NAME=VALUE
  4. 相当于java代码中某一个方法中定义的局部变量,只对这个方法有效。

位置变量:

比如脚本中的参数:

$0:脚本自身

$1:脚本的第一个参数

$2:脚本的第二个参数


Shell编程中有三类引号:单引号、双引号、反引号。

''单引号不解析变量

""双引号会解析变量

``反引号是执行并引用一个命令的执行结果,类似于$(...)


循环

for循环

通过使用一个变量去遍历给定列表中的每个元素,在每次变量赋值时执行一次循环体,直至赋值完成所有元素退出循环

格式1

[java]  view plain  copy
  1. for ((i=0;i<10;i++))  
  2. do  
  3.   ...  
  4. Done  

格式2

[java]  view plain  copy
  1. for i in 0 1 2 3 4 5 6 7 8 9  
  2. do  
  3. ...  
  4. Done  


格式3

[java]  view plain  copy
  1. for i in {0..9}  
  2. do  
  3.   ...  
  4. done  

注意:for i in {0..9} 等于for i in {0..9..1} , 第三个参数为跨步。

例如:

{0..9..2} 表示 0,2,4,6,8

 

 

while循环

适用于循环次数未知,或不便用for直接生成较大的列表时

 格式:

[java]  view plain  copy
  1. while 测试条件  
  2. do  
  3. 循环体  
  4. done  

循环控制命令——break

break命令是在处理过程中跳出循环的一种简单方法,可以使用break命令退出任何类型的循环,包括while循环和for循环

 

循环控制命令——continue

continue命令是一种提前停止循环内命令,而不完全终止循环的方法,这就需要在循环内设置shell不执行命令的条件


条件

bash条件测试

-gt:大于:

-lt:小于

-ge:大于等于

-le:小于等于

-eq:等于

-ne:不等于


if判断:

单分支

[java]  view plain  copy
  1.  if 测试条件;then  
  2. 选择分支  
  3. fi  

双分支

[java]  view plain  copy
  1. if 测试条件  
  2.  then  
  3.   选择分支1  
  4.   else  
  5.   选择分支2  
  6. fi  

多分支

[java]  view plain  copy
  1. if 条件1; then  
  2.           分支1  
  3. elif 条件2; then  
  4.           分支2  
  5. elif 条件3; then  
  6.           分支3  
  7.          ...  
  8. else  
  9.           分支n  
  10. fi

Case判断

 

有多个测试条件时,case语句会使得语法结构更清晰

格式: 

[java]  view plain  copy
  1. case 变量引用 in  
  2.                PATTERN1)  
  3.                          分支1  
  4.                          ;;  
  5.                PATTERN2)  
  6.                          分支2  
  7.                          ;;  
  8.                ...  
  9.                *)  
  10.                          分支n  
  11.                          ;;  
  12.                esac  

算数运算

[java]  view plain  copy
  1. let varName=算术表达式  
  2.    
  3. varName=$[算术表达式]  
  4.    
  5. varName=$((算术表达式))  
  6.    
  7. varName=`expr $num1 + $num2`  
需要用到shell中的逻辑操作符

-a 与

-o 或

! 非


自定义函数

格式:

[java]  view plain  copy
  1. function 函数名(){  
  2. ...  
  3. }  

 

  1. 引用自定义函数文件时,使用source  func.sh
  2. 有利于代码的重用性
  3. 函数传递参数(可以使用类似于Java中的args,args[1]代表Shell中的$1)
  4. 函数的返回值,只能是数字

read

read命令接收标准输入(键盘)的输入,或者其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。

格式

[java]  view plain  copy
  1. read VAR_NAME  

read如果后面不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中

[java]  view plain  copy
  1. #表示输入时的提示字符串:  
  2. read -p "Enter your name:" VAR_NAME  
[java]  view plain  copy
  1. # -t表示输入等待的时间  
  2. read -t 5 -p "enter your name:" VAR_NAME  

[java]  view plain  copy
  1. # -s 表示安全输入,键入密码时不会显示  
  2. read  -s  -p "Enter your password: " pass

declare

用来限定变量的属性

-r 只读

-i 整数:某些算术计算允许在被声明为整数的变量中完成,而不需要特别使用expr或let来完成。

-a 数组



字符串操作

获取长度:

[java]  view plain  copy
  1. ${#VAR_NAME}  

字符串截取

[java]  view plain  copy
  1. ${variable:offset:length}或者${variable:offset}  

取尾部的指定个数的字符

[java]  view plain  copy
  1. ${variable: -length}:注意冒号后面有空格  

大小写转换

小-->大:

[java]  view plain  copy
  1. ${variable^^}  

大-->小:

[java]  view plain  copy
  1. ${variable,,}  

数组

定义:declare -a:表示定义普通数组

特点

  1. 支持稀疏格式
  2. 仅支持一维数组

数组赋值方式

  1. 一次对一个元素赋值a[0]=$RANDOM
  2.  一次对多个元素赋值a=(a b c d)

按索引进行赋值a=([0]=a [3]=b [1]=c)

使用read命令read -a ARRAY_NAME查看元素

[java]  view plain  copy
  1. ${ARRAY[index]}:查看数组指定角标的元素  
  2. ${ARRAY}:查看数组的第一个元素  
  3. ${ARRAY[*]}或者${ARRAY[@]}:查看数组的所有元素  

获取数组的长度

[java]  view plain  copy
  1. ${#ARRAY[*]}  
  2. ${#ARRAY[@]}  

获取数组内元素的长度

[java]  view plain  copy
  1. ${#ARRAY[0]}  

注意:${#ARRAY[0]}表示获取数组中的第一个元素的长度,等于${#ARRAY}

 

从数组中获取某一片段之内的元素(操作类似于字符串操作)

格式: 

[java]  view plain  copy
  1. ${ARRAY[@]:offset:length}  

  1. offset:偏移的元素个数
  2. length:取出的元素的个数
  3. ${ARRAY[@]:offset:length}:取出偏移量后的指定个数的元素
  4. ${ARRAY[@]:offset}:取出数组中偏移量后的所有元素

 数组删除元素:

[java]  view plain  copy
  1. unset ARRAY[index]

其他命令

date

显示当前时间

  1. 格式化输出 +%Y-%m-%d
  2. 格式%s表示自1970-01-01 00:00:00以来的秒数
  3. 指定时间输出  --date='2009-01-01 11:11:11'
  4. 指定时间输出  --date='3 days ago' (3天之前,3天之后可以用-3)




  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值