Shell脚本
是一种为shell编写的脚本程序
使用文本编辑器既能编写,拓展名不影响脚本执行
实例:
#!/bin/bash
echo "Hello World"
#!
告诉系统这个脚本需要什么解释器执行
运行脚本
作为可执行程序
将代码保存后,给文件添加可执行权限+x
chmod +x ./test.sh #
./test.sh #执行脚本
作为解释器参数
直接运行解释器,将文件作为其参数 这种方式不需要在文件开头指定解释器信息
/bin/sh test.sh
Shell变量
定义变量
your_name="Tom"
**注意:**等号不能有空格
使用变量
在变量前加美元符号$
还可在变量外添加大括号{}
echo $your_name
echo ${your_name}
只读变量
使用readonly命令将变量定义为只读变量,值不能被改变
url="baidu.com"
readonly url
删除变量
使用unset变量删除变量
unset url
Shell字符串
可用单引号,或双引号,也可不用引号
单引号
- 单引号内任何字符都会原样输出,单引号字符串中变量无效
- 单引号字符串中不能出现单独一个的单引号,但可成对出现
双引号
- 双引号里可以有变量
- 双引号里可以出现转义字符
拼接字符串
text1='123'
text2='456'
echo ${text1}${text2}
#输出123456
字符串长度
str1="abcd"
echo ${#str1} #输出4
提取子字符串
从字符串第2个字符开始截取4个字符:
str2="hello world"
echo ${str2:1:4} #输出ello
查找子字符串
查找字符a
或o
的位置(哪个字母先出现就计算哪个)
str3="how are you"
echo `expr index "$str3" ao` #输出2
Shell数组
只支持一维数组
定义数组
my_arr1=(1 2 'A' "BC")
my_arr2=(
1
'a'
"cc"
)
读取数组
使用@
符号获取数组中所有元素
echo ${my_arr1[@]}
#输出1 2 A BC
数组长度
length=${#my_arr1[@]}
length=${#my_arr2[*]}
Shell传参
执行脚本时,向脚本传递参数,脚本内获取参数的格式为:$n,n代表数字,代表执行脚本的第n个参数,$0为执行的文件名
实例
定义文件:
#!/bin/bash
echo "执行的文件名: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
执行脚本:
$ chmod +x text.sh
$ ./test.sh 1 A
执行的文件名: ./test.sh
第一个参数: 1
第二个参数: A
特殊参数
- $# 传递到脚本的参数个数
- $* 以一个单字符串显示所有向脚本传递的参数。 如"$* “用「"」括起来的情况、以”$1 $2 … $n"的形式输出所有参数。
- $$ 脚本运行的当前进程ID号
- $! 后台运行的最后一个进程的ID号 $@ 与$* 相同,但是使用时加引号,并在引号中返回每个参数。
- 如"$@“用「"」括起来的情况、以”$1" “$2” … “$n” 的形式输出所有参数。
- $- 显示Shell使用的当前选项,与set命令功能相同。
- $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
Shell基本运算符
原生bah不支持简单的数学运算,但可以使用awk或expr实现,expr最常用。
expr是一款表达式计算工具,使用它能完成表达式的求值操作
两数相加:
#!/bin/bash
val=`expr 2 + 2`
echo "2 + 2 = $val"
注意:
- 表达式和运算符之间要有空格
- 完整表达式要被
` `
包含
关系运算符
- -eq 是否相等
- -ne 是否不等
- -gt 左边是否大于右边
- lt 左边是否小于右边
- -ge 左边是否大于等于右边
- -le 左边是否小于等于右边
布尔运算符
- ! 非
- -o 或
- -a 与
文件测试运算符
- -b file 是否是块设备文件
- -c file 是否是字符设备文件
- -d file 是否是目录
- -f file 是否是普通文件
- -g file 是否设置了SGID位
- -k file 是否设置了粘着位
- -r file 是否可读
- -w file 是否可写
- -x file 是否可执行
- -s file 是否为空
- -e file 是否存在