初识shell
壹、shell变量
1. 常用方式
```
# 1. 定义变量
abc='abc'
ABC
_abc
a1
# 2. 使用变量
${abc}
echo $abc
# 3. 只读变量:将变量a1变为只读
readonly a1
# 4. 删除变量:删除变量ABC
unset ABC
```
2. 变量类型
- 局部变量:仅在当前shell实例中有效
- 环境变量:所有的程序,包括shell启动的程序都能访问环境变量;必要时shell脚本可以自定义环境变量
- shell变量:shell程序设置的特殊变量。有一部分是环境变量,有一部分是局部变量
3. shell字符串:可以用单引号、双引号,也可以不用引号(保持良好编程习惯,最好用引号)
```
# 1. 单引号:串中可以有成对的单引号,但是不能有单个的单引号;单引号中的变量是无效的
str1='string one'
# 2. 双引号:可以有转义字符;可以有变量
str2="string two ${abc} \n"
# 3. 获取字符串长度
echo ${#str1}
# 4. 提取子串
echo ${str:1:3}
# 5. 查找子串:查找字母i或o的位置,哪个先出现就返回哪个
echo `expr index "$str1" io`
```
4. shell数组
```
# 1. 定义数组:只支持一维数组;可以使用不连续的下标,而且范围不受限
arr=(0 1 2)
arr[5]=3
arr[7]=4
# 2. 读取数组
${arr[5]} # 获取单个元素
${arr[@]} # 获取所有元素
# 3. 获取数组的长度
# 3.1 获取数组元素的个数
${#arr[@]}
${#arr[*]}
# 3.2 获取单个元素的长度
${#arr[5]}
```
5. shell注释
```
# 1. 单行注释
用#开头一行
# 2. 多行注释:下面EOF也可以用其他字符代替
:<<EOF
*******
*******
*******
EOF
```
贰、shell流程控制
1. if else
```
a=10
b=20
if [ $a -eq $b ] # 判断条件写在[]中,[ $a -eq $b ]可以换成(( $a == $b ))
then
echo "a 等于 b"
elif [ $a -gt $b ] # 判断条件写在[]中,[ $a -gt $b ]可以换成(( $a > $b ))
then
echo "a 大于 b"
elif [ $a -lt $b ] # 判断条件写在[]中,[ $a -lt $b ]可以换成(( $a < $b ))
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
```
2. for
```
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
```
3. while
```
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
```
4. 无限循环
```
# 1. 用while
while :
do
command
done
# 2. 用for
for(( ; ; ))
```
5. until:与while相反
```
until condition
do
command
done
```
6. case...esac
```
site="runoob"
case "$site" in
"runoob") echo "菜鸟教程"
;;
"google") echo "Google 搜索"
;;
"taobao") echo "淘宝网"
;;
esac
```
7. 跳出循环
break、continue
叁、shell函数
# 1. 定义函数
[ function ] funname [()]
{
action;
[return int;]
}
2. 函数参数
参考来源:
Shell 变量