脚本编程shell
shell 一个能编写代码的⽂ 本编辑器和⼀个能解释执⾏的脚本解释器
Linux 的 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)
运行流程
chmod +x ./test.sh
sh ./test.sh
./test.sh
常⽤的脚本关键字
- echo:打印⽂字到屏幕
- exec:执⾏另⼀个 Shell 脚本
- read:读标准输⼊
- expr:对整数型变量进⾏算术运算
- test:⽤于测试变量是否相等、 是否为空、⽂件类型等
- exit:退出
脚本例子流程
>su - hr
>vi test.sh //脚本文件后缀 .sh
#!/bin/bash // #!是⼀个约定的标记,它告诉系统这个脚本需要什么解释器来执⾏,即使⽤哪⼀种 Shell
echo “hello world !”
>chmod +x test.sh
>sh ./test.sh
>hello world !
调用变量
$变量申明符号
变量类型
- ⽤户⾃定义变量
>vi custom_r.sh
#!/bin/bash
name=dd
echo $name
readonly name
name=xx
>echo $name
- 预定义变量
- $0 :脚本⽂件名
- $1-9 :第 1-9 个命令⾏参数名
- $# :命令⾏参数个数
- $@ :所有命令⾏参数
- $* :所有命令⾏参数
- $? :前⼀个命令的退出状态,可⽤于获取函数返回值
- $$ :执⾏的进程 ID
>vi predef.sh
#!/bin/bash
echo "print $"
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$# = $#"
echo "\$@ = $@"
echo "\$* = $*"
echo "\$$ = $$"
echo "\$? = $?"
>chmod +x predef.sh
>./predef.sh 1 2 3 4
>./predef.sh a b c d
- 环境变量
环境变量默认就存在,常⽤的有下⾯这⼏
个:
- HOME:⽤户主⽬录
- PATH:系统环境变量 PATH
- TERM:当前终端
- UID:当前⽤户 ID
- PWD:当前⼯作⽬录,绝对路径
>vi test_env.sh
#!/bin/bash
echo "print env"
echo $HOME
echo $PATH
echo $TERM
echo $PWD
echo $UID
>chmod +x test_env.sh
>sh test_env.sh
unset 删除变量
readonly 标记为只读变量
export 指定全局
运算符号
+ - * / 分别为 加、减、乘、除
% 余数运算
$ | ! 分别为”AND、OR、NO
整数比较
-eq 等于,如:if [ “
a
"
−
e
q
"
a" -eq "
a"−eq"b” ]
-ne 不等于,如:if [ “
a
"
−
n
e
"
a" -ne "
a"−ne"b” ]
-gt ⼤于,如:if [ “
a
"
−
g
t
"
a" -gt "
a"−gt"b” ]
-ge ⼤于等于,如:if [ “
a
"
−
g
e
"
a" -ge "
a"−ge"b” ]
-lt ⼩于,如:if [ “
a
"
−
l
t
"
a" -lt "
a"−lt"b” ]
-le ⼩于等于,如:if [ “
a
"
−
l
e
"
a" -le "
a"−le"b” ]
< ⼩于(需要双括号),如:((“
a
"
<
"
a" < "
a"<"b”))
<= ⼩于等于(需要双括号),如:((“
a
"
<
=
"
a" <= "
a"<="b”))
> ⼤于(需要双括号),如:((“
a
"
>
"
a" > "
a">"b”))
>= ⼤于等于(需要双括号),如:(("
a
"
>
=
"
a" >= "
a">="
字符串比较
= 等于,如:if [ “
a
"
=
"
a" = "
a"="b” ]
== 等于,如:if [ “
a
"
=
=
"
a" == "
a"=="b” ],与=等价
常见运算
- m=$[ m + 1 ]
- m=expr $m + 1 # ⽤ ` 字符包起来 expr 全局变量
- let m=m+1
- m=$(( m + 1 ))
vi add_one.sh
#!/bin/bash
m=1
m=$[ m + 1 ]
echo $m
m=`expr $m + 1`
echo $m
let m=m+1
echo $m
m=$(( m + 1 ))
echo $m
脚本例子
#!/bin/bash
a=10
b=20
if [ $a == $b ]
then
echo "a=b"
else
echo "a!=b"
fi
read -t 30 -p "input :" x
if [ $x == 5 ]
then
echo "x is 5"
else
echo "x is not 5"
fi
数组
所谓数组,是有序的元素序列。
[name] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。
组成数组的各个变量称为数组的分量,也称为数组的元素
x=1
echo $x
days=([0]=Sun [1]=Mon [2]=Tue [3]=Wed [4]=Thu // 数组名字=([定义]=元素)
[5]=Fri [6]=Sat)
echo ${days[$x]}
echo ${days[4]}
echo ${days[5]}