shell脚本语法 Linux基础4-Shell语法
#! /bin/bash
来指明bash为脚本解释器。
1 概论1.1 脚本示例
#! /bin/bash
echo "Hello World!"
1.2 运行方式
# 第一种
chmod +x test.sh # 使脚本具有可执行权限
./test.sh # 当前路径下执行
# 第二种
bash test.sh # 用解释器输出
2 注释2.1 单行注释
每行中#之后均为注释.
# 这是一个注释
echo "My name is yrx" # 这也是一个注释
2.2 多行注释
格式:
:<
其中EOF可以替换为任意其它字符串。例如:
:<
3 变量3.1 定义变量
定义变量,不需要加 $ 符号,例如:
name1='yrx' # 单引号定义字符串
name2="yrx" # 双引号定义字符串
name3=yrx # 不加引号定义字符串
定义变量时,等号两边不能有空格;定义变量的时候变量都是字符串,但当变量需要是整数时,会自动把变量转换成整数;被声明为只读的变量无法被unset删除;bash可以用来开一个新的进程,exit或ctrl+d退出新的bash;字符串中,不加引号和双引号效果相同.3.2 使用变量
使用变量shell脚本语法,需要加上 \$ 符号,或者 \${} 符号。花括号是可选的,主要为了帮助解释器识别边界。
name=yrx
echo $name # 输出yrx
echo ${name} # 输出yrx
echo ${name}dfjb # 输出yrxdfjb
3.3 只读变量
使用readonly或者declare可以将变量变为只读。
name=yrx
readonly name
declare -r name # 两种方法都可以
name=yxr # 会报错
3.4 删除变量
unset可以删除变量。
name=yrx
unset name
echo $name # 输出空行
3.5 变量类型自定义变量(局部变量)——子进程不能访问的变量。环境变量(全局变量)————子进程可以访问的变量。
自定义变量改成环境变量:
name=yrx # 定义变量
export name # 第一种办法
declare -x name # 第二种办法
环境变量改为自定义变量
export name=yrx # 定义环境变量
declare +x name # 改为自定义变量
tmux经ctrl a + % 分屏得到的两个界面实际上是两个bash,在一个bash中自定义的bash变量仅可以被当前bash访问,通过bash命令开启的子进程也无法访问。export后变量变为环境变量,就可以被全局访问。
3.6 字符串
字符串可以用单引号、双引号、不用引号来定义。
单引号与双引号的区别:
name=yrx
echo 'hello, $name \"hh\"' # hello, $name \"hh\"
echo "hello, $name \"hh\"" # hello, yrx "hh"
获取字符串长度:
name="yrx"
echo ${#name} # 3
提取子串:
name="hello,yrx"
echo ${name:0:5} # 提取从0开始的5个字符
4 默认变量4.1 文件参数变量
在执行shell脚本时,可以向脚本传递参数。\$1是第一个参数,\$2是第二个参数,依此类推。
特殊地,\$0是文件名(包含路径)。
#! /bin/bash
echo "filename:"$0
echo "first var:"$1
echo "second var:"$2
echo "third var:"$3