SHELL语言第一篇shell基础

详细语法链接

1 开发环境

1.安装文本编辑器(ubuntu)

sudo apt install vim

创建sh文件

vim aaa.sh

2.指定脚本解释器

#!/bin/bash  --- 指定脚本解释器
echo "hello world"

2. shell基础语法

1.注释

  • 单行注释的格式 #
  • 多行注释的格式每一行加一个 #
  • 文档注释:
    • 以:<<EOF 开始,以 EOF结束
    • 以:<<’ 开始,以 '结束
    • 以: '开始,以’结束

2.变量

1、定义变量:

aaa_bbb="ccc"

2、使用变量

aaa_bbb="ccc"
echo $aaa_bbb
echo ${aaa_bbb} #花括号是帮助解释器识别变量的边界推荐写法

3、只读变量(常量)

#!/bin/bash
aaa_bbb="https://www.baidu.com"
readonly aaa_bbb #只读变量

4、删除变量

unset aaa_bbb #不能删除只读变量

3.命名规范

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

4.字符串

单引号

aaa='bbb' #单引号字符串中的变量是无效的

双引号

aaa='bbb'
ccc="Hello,  \"$aaa\"! \n" #双引号里可以有变量,双引号里可以出现转义字符
echo -e $ccc   #输出转义字符

输出结果为:Hello,bbb!

拼接字符串

aaa="bbb"
# 使用双引号拼接
ccc="hello, "$aaa" !"
ddd="hello, ${aaa} !"

获取字符串长度

aaa="bbb"
echo ${#aaa}

输出结果:3

提取字符串

从字符串第 2 个字符开始截取 4 个字符(下标从0开始):

string="abcdefghijklmn"
echo ${string:1:4} 

执行结果bcde

5.数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

定义数组

数组名=(值1 值2 ... 值n) #数组元素用"空格"符号分割开
array_name[0]=value0 #通过下标定义数组中的其中一个元素

读取数组

${数组名[下标]}
echo ${array_name[@]} #使用 **@** 符号可以获取数组中的所有元素

获取数组的长度

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}

6.运算符

1、算数运算符

常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
+加法expr $a + $b 结果为 30。
-减法expr $a - $b 结果为 -10。
*乘法expr $a \* $b 结果为 200。
/除法expr $b / $a 结果为 2。
%取余expr $b % $a 结果为 0。
=赋值a=$b 将把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

注意:

  • 条件表达式要放在方括号之间,并且要有空格,必须写成 [ $a == $b ]
  • 表达式和运算符之间要有空格,必须写成 2 + 2。

2、字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:

运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否为0,不为0返回 true。[ -n “$a” ] 返回 true。
$检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。

3、关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。

4、布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。

5、逻辑运算符

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

运算符说明举例
&&逻辑与 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑或 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true

7.流程控制

1、if 语句:
condition 条件
command 命令

if condition
then
    command1 
    command2
    ...
    commandN 
fi

2、if else 语句:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

3、if else-if else 语句:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

4、for 循环

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

5、while循环

while循环用于不断执行一系列命令,也用于从输入文件中读取数据

while condition
do
    command
done

6、case … esac语句

case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。
case 后为取值,值可以为变量或常数。模式支持正则表达式。

casein
模式1)
    command1
    command2
    command3
    ;;
模式2)
    command1
    command2
    command3
    ;;
*)
    command1
    command2
    command3
    ;;
esac

8.函数

[ function ] funname [()]

{

    action;

    [return int;]

}

注意:

  • 1、可以使用function fun() 定义函数,也可以直接fun() 定义,不带任何参数。
  • 2、函数参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

下面我们将定义一个函数,并发生函数调用

#!/bin/bash
aaa(){
    echo "这是第一个函数!"
}
echo "-----这里是函数开始执行-----"
aaa
echo "-----这里是函数执行完毕-----"

下面,我们定义一个带有return语句的函数:

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

函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

函数参数

在 Shell 中,调用函数时可以向其传递参数。在函数体内部, 通过 $n 的形式来获取参数的值,例如, $1 表示第一个参数, 2 表示第二个参数 . . . 注意,当 n > = 10 时,需要使用 2 表示第二个参数... 注意, 当 n>=10 时,需要使用 2表示第二个参数...注意,当n>=10时,需要使用{n}来获取参数。

funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值