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
  1. 如果export在一个文件中,则需要使用source filename.sh使其生效

  2. 删除变量:

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} or echo ${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