“#!” 是一个约定的标记,告知系统哪种shell
#!/bin/bash
echo "Hello World !"
注释
#-------------
# 注释使用 #
#-------------
变量
变量名和等号之间不能有空格
使用变量
前加$, 可以外加{}区分界限
name="bash"
echo $name
echo ${name}
只读变量
使用 readonly
url="http://blog.csdn.net/shimingliabc"
readonly url
删除变量
使用 unset, unset命令不能删除只读变量
unset url
变量类型
- 局部变量
- 环境变量
env
printenv
- shell变量
Shell字符串
引号
单双引号区别同php
单引号内不能有变量,双引号内可以有变量
双引号可以使用转义字符
name='blog'
str="hello, ${name}"
拼接
直接拼接,不需要运算符
name="linux"
greeting="hello, "${name}" !"
长度
str="linux"
echo ${#str} #4
提取子字符串
str="alibaba"
echo ${str:1:4} #liba
查找子字符串
string="alibaba is a great company"
echo `expr index "$string" is` #3
数组
数组名=(值1 值2 ... 值n)
读取元素
${数组名[下标]}
${arr[@]} #@可以获取所有元素
数组长度
len=${#arr[@]}
#或者
len=${#arr[*]}
脚本参数
参数 | 说明 |
---|---|
$0 | 脚本名称 |
$# | 参数个数 |
$* | 将所有参数视为一个字符串 |
$$ | 脚本运行的当前进程id |
$! | 后台运行的最后一个进程id |
$@ | 同$*, 但将参数视为数组 |
$- | shell的当前选项 |
$? | 显示命令退出状态,0表示没错误 |
echo $1 #第1个参数
echo $2 #第2个参数
echo $@ #所有参数
大多数情况下
$@
与$*
没有区别。但在for循环时,可看出$*
视为一个整体,但$@
视为一个数组。
for pts in "$@"
do
echo -n "$pts, "
done
echo
for pts in "$*"
do
echo -n "$pts, "
done
输出
sh paras.sh hello world 123 456 #调用