linux shell语法

overall

shell 脚本也是动态解释型语言,shell脚本第一行指定了脚本解释器

#! /bin/sh  
#! /bin/bash
...

脚本执行方式

  • ./xxx.sh 向二进制可执行程序一样
  • /bin/sh xxx.sh 作为脚本解释器的参数执行

变量

赋值

  • 显示赋值 : var=123 注意=左右不能有空格
  • 语句赋值: for file in ls /lib

使用变量

  • 变量名前加 $符号,例如 $var or ${var}

删除变量

  • unset var

类型

  • 局部变量 , 脚本内部定义的变量,在当前文件中有效
  • 环境变量,所有程序都可以访问
  • shell变量,shell程序设置的特殊变量
    • $# 参数总个数
    • $* 以一个单字符串显示所有参数
    • $$ 脚本当前进程号
    • $@
    • $? 显示最后命令的退出状态,0表示没有错误
    • $*$@ 区别:有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。

字符串

  • ‘’ 原样输出
  • “” 可以转义和输出变量
  • ${#str} 获取str字符串长度,不含\0
  • ${str:1:4} 提取子字符串,从index 1开始的4个字符

数组

  • arr=(v1 v2 v3 ...)
  • 读取数组: ${arr[index]}
  • ${arr[@]} 数组所有元素
  • ${#arr[@]} 数组元素的个数

运算符

算法运算符

  • shell 不支持数学运算,但是可以通过 awk ,expr 命令来实现
$ a=10
$ b=2
$ echo `expr $a + $b`
12
$ echo `expr $a - $b`
8
$ echo `expr $a \* $b`
20
$ echo `expr $a / $b`
5
$ echo `expr $a % $b`
0
$ echo `expr $a == $b`
0
$ echo `expr $a != $b`
1

  • [ $a == $b ] 返回 false。
  • [ $a != $b ] 返回 true。
  • 条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]。
  • 乘号*前边必须加反斜杠\才能实现乘法运算

关系运算符

  • 支持数字,不支持字符串,除非字符串的值是数字

假定变量 a 为 10,变量 b 为 20

opintroductionexample
-eq是否相等[ $a -eq $b ] 返回 false
-nq是否不相等[ $a -ne $b ] 返回 true
-gt是否大于[ $a -gt $b ] 返回 false
-lt是否小于[ $a -lt $b ] 返回 true
-ge是否大于等于[ $a -ge $b ] 返回 false
-le是否小于等于[ $a -le $b ] 返回 true

布尔/逻辑运算符

  • -o ||
  • -a &&
  • ! !

文件测试运算符

opintroduction
-b file是否是块设备文件
-c file是否是字符设备文件
-d file是否是目录
-f file是否是普通文件
-r file是否可读
-w file是否可写
-x file是否可执行
-s file文件大小是否大于0
-e file是否存在

流程控制

if else

if condition
then 
	cmd
fi


if condition1
then 
	cmd1
elif condition2
then 
	cmd2
else 
	cmd3
fi
  • 写在一行中的时候,加;
if [ $a != $b ]; then echo "dddd"; fi

for

for var in item1 item2 ... itemn
do
	cmd
done
#!/bin/bash
for((i=1;i<=5;i++));do
    echo "这是第 $i 次调用";
done;
  • 写在一行中的时候,加;
for var in item1 item2 ... itemN; do command1; command2… done;

while

while condition
do
	cmd
done
#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done
while true
do
	cmd
done

函数

[ function ] funname [()]
{
	cmd;
	[return int;]
}
  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
#!/bin/bash

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

函数参数

  • 使用$n 来获取,和shell 参数一样

文件包含

  • 和 c语言的include一样
  • 在f1文件中可以定义函数、变量,在f2文件中使用
. filename # 注意点号(.)和文件名中间有一空格
source filename
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值