1. 简介
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
2. shell脚本执行方式
- 格式
脚本以#!/bin/bash
开头
脚本需要有可执行权限 - 执行方式
方式1:赋予脚本x权限,再执行./hello.sh
方式2:不用给x权限,直接sh hello.sh
3. Shell的变量
-
系统变量
$HOME、$PWD等
显示当前shell中所有变量:set -
自定义变量
定义变量:变量名=值
撤销变量:unset 变量
声明静态变量:readonly 变量,注:静态变量无法撤销#!/bin/bash # 案例1:定义变量A A=100 # 输出变量需要加上$ echo A=$A echo "A=$A" # 案例2:撤销变量A unset A echo A=$A # 案例3:声明静态变量B=2,不能unset readonly B=200 echo B=$B # unset B echo "B=$B" C=$(date) echo C=$C
结果:
4. 位置参数变量
-
介绍
执行一个脚本时,如希望获取到命令行的参数信息,就可以使用位置参数变量。
如./myshell.sh 100 200
,这就是一个执行shell的命令行,可在myshell脚本中获取到参数。 -
基本语法
#!/bin/bash echo "0=$0 1=$1 2=$2" echo "所有的参数=$*" echo "$@" echo "参数的个数=$#"
结果:
5. 运算符
格式如下
#!/bin/bash
# 案例1:计算(2+3)*4
RES1=$[(2+3)*4]
echo RES1=$RES1
# 案例2:请求出命令行的两个参数[整数]的和 20 50
SUM=$[$1+$2]
echo SUM=$SUM
6. 条件判断
- 基本语法
[ condition ] (注意 condition前后要有空格)
非空返回true - 判断语句
符号 | 作用 |
---|---|
= | 字符串比较 |
-lt | 小于 |
-le | 小于等于 |
-eq | 等于 |
-gt | 大于 |
-ge | 大于等于 |
-ne | 不等于 |
-f | 文件存在并是一个常规文件 |
-e | 文件存在 |
-d | 文件存在并是一个目录 |
案例:
#!/bin/bash
# 案例1:"ok"是否等于"ok"
if [ "ok"="ok" ]
then
echo "equal"
fi
# 案例2:23是否大于等于22
if [ 23 -ge 22 ]
then
echo "yes"
fi
# 案例3:/root/shellcode/aaa.txt文件是否存在
if [ -f /root/shellcode/aaa.txt ]
then
echo "存在"
fi
7. 流程控制
-
if 判断
同上 -
case 语句
#!/bin/bash # 案例:当命令行参数是1时,输出周一,2,输出周二,其他情况输出other case $1 in "1") echo "周一" ;; "2") echo "周二" ;; *) echo "other" ;; esac
-
for 循环
#!/bin/bash # 案例1:打印命令行输入的参数[可看出$*和$@的区别] # $*是吧输入的参数当作一个整体,所以只会输出一句 for i in "$*" do echo "num is $i" done # 使用$@来获取输入的参数,所以有几个参数,就输出几句 echo "=========================" for j in "$@" do echo "num is $j" done
#!/bin/bash # 案例:把1-100的和输出显示 SUM=0 for (( i=1;i<=100;i++ )) do SUM=$[ $SUM+$i ] done echo "总和"=$SUM
-
while 循环
#!/bin/bash # 案例:从命令行输入一个数n,统计从1加到n的和是多少 SUM=0 i=0 while [ $i -le $1 ] do SUM=$[ $SUM+$i ] i=$[ $i+1 ] done echo "执行结果为$SUM"
8. read读取控制台输入
read(选项)(参数)
选项:
-p: 指定读取数值时的提示符
-t:指定读取数值时的等待时间,没在指定时间内输入,就退出不再等待
案例
#!/bin/bash
# 案例:读取控制台输入一个NUM1值
read -p "请输入一个数NUM1=" NUM1
echo "输入的数NUM1是$NUM1"
# 案例2:读取控制台输入一个NUM2值,在10秒内输入
read -t 10 -p "请输入一个数NUM2=" NUM2
echo "输入的数NUM2是$NUM2"
9. 函数
-
系统函数
basename /root/aaa/test.txt 获取文件名 dirname /root/aaa/test.txt 获取目录名
-
自定义函数
案例:#!/bin/bash # 案例:计算输入两个参数的和(动态获取)getSum function getSum(){ SUM=$[ $n1+$n2 ] echo "和=$SUM" } # 输入两个值 read -p "请输入n1=" n1 read -p "请输入n2=" n2 getSum $n1 $n2