03-Shell 基本语法1
注释¶
- 单行注释
# 我是单行注释
- 多行注释
:<<!
这里是多行注释!
作者:poplar
时间:2019年5月5日20:53:21
联系:xxx@itcast.cn
!
: '
这里是多行注释!
作者:poplar
时间:2019年5月5日20:53:21
联系:xxx@itcast.cn
'
Shell变量¶
存储动态值的抽象概念;变量名不变,变量值可变
变量分类:
- 本地变量:在本地有效
- 全局变量:在当前系统下,所有环境都有效
- 内置变量:bash中默认包含一些变量,可直接使用
本地变量¶
普通变量¶
变量名=变量值
:变量值必须是一个整体,中间不能有特殊字符变量名='变量值'
:看到的内容和输出的内容一致变量名="变量值"
:如果在变量A的变量值范围内,有可以解析的变量B,那么就首先解析变量B,将B的结果和其他内容组合后,再赋值给A eg.
poplar@PoplarTang:~/Lesson$ val_b=itcast
poplar@PoplarTang:~/Lesson$ val_a='hello $val_b'
poplar@PoplarTang:~/Lesson$ echo $val_a
hello $val_b
poplar@PoplarTang:~/Lesson$ val_a="hello $val_b"
poplar@PoplarTang:~/Lesson$ echo $val_a
hello itcast
命令变量¶
变量名=`命令`
变量名=$(命令)
注意
注意等号左右两边不能有空格
- 执行流程
1、执行命令
2、将命令执行后的结果,赋值给变量名
eg.
wo=$(whoami)
echo $wo
如何查看变量¶
echo $变量名
echo "aaa ${变量名} bbb ccc"
全局变量¶
-
定义方式:
-
定义一个本地变量
- 使用
export
声明这个本地变量为全局变量
itcast1=haha666
export itcast1
# 合并为1步
export itcast2=test123
env | grep itcast
# output
itcast2=test123
itcast1=haha666
-
如果export在一个文件中,则需要使用source filename.sh使其生效
-
删除变量:
unset itcast1
- 系统全局变量:
在vim ~/.bashrc
文件添加一下类似命令:
export itcast2=test123
内置变量¶
查看bash内置变量:man bash
-
与脚本文件有关系的变量
-
$0
获取脚本的名称 $#
获取脚本的参数数量$n
获取指定位置的参数-
$?
获取上一个命令执行的返回值 -
字符串相关的内置变量
截取字符串 ${变量名:起始位置:截取长度}
- 从索引3取5位:
echo ${str:3:5}
- 从开始取2位:
echo ${str:0:2}
- 从开始到倒数第3位:
echo ${str::-2}
- 末尾2位:
echo ${str:0-2}
orecho ${str: -2}
变量的默认值¶
变量为null 或 空字符串时使用默认值:${变量名:-默认值}
a=123
echo "test: ${a:-666}"
echo "test: ${b:-666}"
# 输出
test: 123
test: 666
变量不为空时使用默认值:${变量名:+默认值}
a=123
echo "test: ${a:+666}"
echo "test: ${b:+666}"
# 输出
test: 666
test:
Shell数组¶
- 定义
arr=(A "B" C D)
or
arr[0]=A
arr[1]=B
arr[2]=C
arr[3]=D
- 获取指定元素
cho "元素1:${arr[1]}"
- 获取所有元素及长度
echo "数组的所有元素:${arr[*]} 长度${#arr[*]}"
echo "${arr[@]}"
- 添加元素
arr+=(666)
arr+=(123 ddd)
- 删除元素
unset a[2]
- 清空数组
unset arr