Shell 环境
解释器
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
在shell脚本中指定解释此脚本的shell程序:
#!/bin/sh
或者
#!/bin/bash
#!
告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
执行脚本
作为可执行程序
需要加
./
,否则系统会去PATH里寻找指定文件
chmod +x ./name.sh # 给脚本添加可执行权限
./name.sh # 执行脚本
作为解释器的参数
这种方式运行的脚本,不需要在第一行指定解释器信息
/bin/sh test.sh
Shell 变量
定义变量
变量名和等号之间不能有空格
your_lastname="zy"
echo $your_lastname
your_firstname="lin"
echo $your_firstname
echo ‘my name is ${your_lastname}-${your_firstname}‘
使用变量
需要在变量名前加
$
, 花括号可用来识别变量边界:
for file in `ls /etc`;do
echo $file
done
for file in $(ls /etc);do
echo $file
done
只读变量
使用
readonly
后,变量不可修改
myUrl = "https"
readonly myUrl
删除变量
不能删除只读变量
unset myUrl
Shell 字符串
单引号
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的,且转义字符无效
双引号
双引号里可以有变量,可以出现转义字符
字符串拼接
#!/bin/bash
your_name="lzy"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2=‘hello, ‘$your_name‘ !‘
greeting_3=‘hello, ${your_name} !‘
echo $greeting_2 $greeting_3
字符串长度
str="lzyuchen"
echo ${#str}
提取子字符串
str="lzyuchen"
echo ${str0:2}
查找子字符串
str="lzyuchen"
echo `expr index "{$str}" u`
以上脚本中是反引号,而不是单引号 ‘
Shell 数组
bash支持用括号表示一维数组(不支持多维数组),并且没有限定数组的大小。
# 定义数组
lists = (value0,value1)
# 定义数组元素
n=1000
lists[n[ = valuen
# 读取数组
n=999
valuen=${array_name[n]}
# 使用 @ 符号可以获取数组中的所有元素
echo ${array_name[@]}
# 获取数组的长度
length=${#array_name[@]}
Shell 注释
以
#
开头的行就是注释,会被解释器忽略。