变量
Shell 变量主要分为三种:自定义变量、系统变量、预定义变量。
自定义变量:
命名规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
- 变量名和等号之间不能有空格
使用变量:
your\_name\="lala"
echo $your\_name
echo ${your\_name}
{}可以不加
只读变量:使用readonly
#!/bin/bash myUrl\="http://www.google.com"
readonly myUrl
删除变量unset variable\_name
系统变量
系统变量是指默认就存在的,主要有:
- HOME:用户主目录
- PATH:系统环境变量 PATH
- TERM:当前终端
- UID:当前用户 ID
- PWD:当前工作目录,绝对路径
预定义变量
预定义变量常用来获取命令行的输入,主要有:
- $0:脚本文件名
- $1-9:第 1-9 个命令行参数名
- $#:命令行参数个数
- $@:所有命令行参数
- $*:所有命令行参数
- $?:前一个命令的退出状态,可用于获取函数返回值
- $$:执行的进程 ID
“$@
”用于创建一个包含所有参数的列表。下面程序是用 for 语句来顺次处理所有参数时就会用到它。
1 #!/bin/sh
2
3 echo $0
4 for item in "$@"; do
5 echo $item
6 done
运算符
可以采用下面4中调用方式
#!/bin/bash
m=1
m=$\[ m + 1 \]
m=\`expr $m + 1\`
let m=m+1 \# 注意 + 号左右不要加空格
m=$(( m + 1 ))
语句
if语句
if [ 条件判断式 ]
then 程序
elif [ 条件判断式 ]
then 程序
fi
例子:
判断语句的3种写法
1 #!/bin/sh
2
3 message="Hello"
4
5 if test "$message" = "Hello"; then
6 echo "Hello World"
7 fi
8
9 if [ "$message" = "Hello" ]; then
10 echo "Hello World"
11 fi
12
13 if [[ $message == "Hello" ]]; then
14 echo "Hello World"
15 fi
用于字符串的比较:
字符串1 ==字符串2:字符串匹配
字符串1 !=字符串2:字符串不匹配
-z字符串:字符串为空
-n字符串:字符串不为空
字符串== 模式:字符串与模式相匹配
字符串!= 模式:字符串与模式不匹配
用于数组的比较:
数值1 -eq数值2:数值相等(equal)
数值1 -ne数值2:数值不相等(not equal)
数值1 -lt 数值2:数值1小于数值2(less than)
数值1 -le 数值2:数值1小于或等于数值2(less or equal)
数值1 -gt 数值2:数值1 大于数值2(greater than)
数值1 -ge 数值2:数值1 大于或等于数值2(greater or equal)
用于文件检查:
-e文件名: 该文件存在
-d文件名: 是目录
-h文件名: 是符号链接
-f文件名: 是常规文件
用于条件的逻辑运算
条件1&&条件2:两者都成立
条件1 ||条件2:某一方(或两者)成立
! 条件:条件不成立
true:始终成立
false:始终不成立
case语句
case $ 变量名 in
“值 1”) 执行程序1;;
“值 2”) 执行程序2;;
esac
for循环
for 变量 in 值 1 值 2 值 3…
do
程序
done
for ((初始值;循环控制条件;变量变化))
do
程序
done
while循环
while [条件判断式]
do
程序
done
loop.sh
1 #!/bin/sh
2
3 while [[ true ]]; do
4 sleep 60
5 echo "Hello World"
6 done
select语句
1 #!/bin/sh
2
3 menu=( "Apple" "Grape" "Orange" )
4
5 PS3=“喜欢哪个?”
6
7 select item in ${menu[@]}; do
8 echo “喜欢 $item”
9 done
函数
定义函数有两种方式:
1、function fun_name() { }
2、fun_name() { }
调用函数有3种方式
# 直接用函数名调用 test 函数
test
# 使用「函数名 函数参数」来传递参数
test 1 2
# 使用「FUN=`函数名 函数参数`」 来间接调用
FUN=`test 1 2`
echo $FUN
例子
按输入选择数据库
1 #!/bin/sh
2
3 servers=(
4 "server01.example.com"
5 "user01@server02.example.com"
6 "root@server03.example.com"
7 "QUIT"
8 )
9
10 PS3=“连接服务器?”
11
12 select server in "${servers[@]}"; do
13 if [[ -z $server ]]; then
14 echo“请选择菜单内的数字”
15 continue
16 fi
17 if [[ $server == "QUIT" ]]; then
18 echo“退出”
19 exit 0
20 fi
21 echo“连接 $server”
22 ssh "$server"
23 done
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。