Shell脚本学习

Hello World

  1. 创建脚本
1
touch hello.sh
  1. 授权

默认是没有执行权限的

1
2
➜  shell ./hello.sh
zsh: permission denied: ./hello.sh

查看现有权限

1
2
3
➜  shell ll
total 0
-rw-r--r-- 1 cuishiying staff 0B 3 24 11:50 hello.sh
权限说明 文件类型 用户u 用户组g 其他用户o 说明(全部a)
位说明 1 2-4 5-7 8-10 共10位(+增加权限, -减少权限)
字符说明 -/d rwx r– rw- -文件,d目录|r可读,w可写,x可执行,-无权限
数字 111=7 100=4 110=6 出现字符(r、w、x)为1,出现-为0

根据上述权限说明,hello.sh是文件,当前用户有读写权限,无可执行权限,所以需要授权才能执行。

1
chmod u+x hello.sh
  1. 编辑脚本
1
2
#! /bin/bash
echo "Hello World"

Shell变量

变量一般用到自定义变量和环境变量。

  1. 自定义变量
1
2
3
4
#! /bin/bash
hello="Hello World"
echo $hello
echo "$hello"
  1. 字符串

获取字符串长度

1
2
3
#! /bin/bash
hello="Hello World"
echo ${#hello}
  1. 数组
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
array=(1 2 3 4 5);
# 获取数组长度
length=${#array[@]}
#输出数组长度
echo $length #输出:5
# 输出数组第三个元素
echo ${array[2]} #输出:3
unset array[1] # 删除下标为1的元素也就是删除第二个元素
for i in ${array[@]};do echo $i ;done # 遍历数组,输出: 1 3 4 5

Shell流程控制

  1. if条件
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
a=3;
b=9;
if [ $a -eq $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
else
echo "a 小于 b"
fi
  1. for循环
1
2
3
4
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done

Shell函数

  1. 无参无返回值
1
2
3
4
5
6
7
#!/bin/bash
hello(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
hello
echo "-----函数执行完毕-----"
  1. 有返回值有参数
1
2
3
4
5
6
7
8
9
#! /bin/bash
test(){
echo "第一个参数 $1"
echo "第二个参数 $2"
# 只能返回数字
return $(($1+$2))
}
test 1 2
echo "结果为 $?"

查询日志

1
grep "xxx" xxx.log | wc -l