- 数据类型
- 字符串
- 数组
- 运算符
- 逻辑比较
- 字符串比较
- 文件判断
- 常见语法(if,case,while,函数)
- if
- case
- while
- function
- 实战:编写一个curl工具类,用于测试post,发送json参数请求
- 脚本的执行方式
- bash hello.sh
- sh hello.sh
- ./hello.sh 必须有可执行权限 chmod +x hello.sh
- source hello.sh
- 声明变量
name=hello //=两边不能有空格
echo $name //或 echo ${name}
数据类型
字符串
字符串的声明可以使用 单引号或双引号,或不使用引号,例如:
name="cheng"
name='cheng'
name=cheng
full_name="jack $name" //这里一定要使用双引号,否则$name无法识别为变量
full_name='jack '$name'' //这样也是可以的,建议使用上面的
# 使用
echo $name
-- 输出字符串的长度使用#
echo ${#full_name}
-- 截取字符串长度
echo ${full_name:2:6} -->ck che
数组
arr=('hello' 'world') 、、中间要以空格隔开
echo ${arr[0]} --hello
echo ${arr[@]} --hello world 取出所有的元素
echo ${#arr[@]} --2 数组长度2
运算符
a=10 b=20 方式一: echo `expr $a + $b` --30 方式二: echo $(($a + $b)) --30 方式三: echo $[a + b] --30 加减乘除取余(+-*/%)使用上述三种方式均可,注意中间运算符两边必须要有空格逻辑比较
| 运算符 | 说明 | 语法 |
|---|---|---|
| == | 比较两个数是否相等 | [$a == $b] ,相等返回true |
| != | 比较两个数是否不相等 | [$a != $b] ,不等返回true |
| -eq | 比较两个数字是否相等 | [$a -eq $b] ,相等返回true |
| -ne | 比较两个数字是否不相等 | [$a -ne $b] ,不相等返回true |
| -gt | 比较两个数字大小,数学符号:> | [$a -gt $b] ,a大于b等返回true |
| -lt | 比较两个数字大小,数学符号:< | [$a -lt $b] ,a小于b等返回true |
| -ge | 比较两个数字大于等于,数学符号:>= | [$a -gt $b] ,a大于等于b等返回true |
| -le | 比较两个数字大于等于,数学符号:<= | [$a -lt $b] ,a小于等于b等返回true |
| -o 或|| | 或运算,相当于OR 比较两个两表达式是否相等 | [$a -lt $b -o 100 < 200 ] ,有一个表达式满足返回true |
| -a 或&& | 且运算,相等于and | [$a -lt $b -a 100 < 200 ] ,两个表达式都满足返回true |
[ $name ] --不为空返回true [ -z $name ] --字符串长度为0,返回true [ -n $name ] --字符串长度不为0,返回true [ $name ] --不为空返回true [ $a = $b ] --两个字符串是否相等,相等返回true
例如:
#/bin/bash a=10 b=10 if [ $a = $b ] then echo 'a等于b' fi ############# c=1 d=2 if [ $c -lt $d ] then echo 'c小于d' fi文件判断
- -r :可读
- -w :可写
- -x :可执行
- -f : 是普通文件
- -d : 是文件目录
- -s :文件不为空
- -e:文件存在
例如:
file=/usr/local/hello.sh if [ -r $file ] then echo '文件可读' fi常见语法(if,case,while,函数) if
if [ ] then #do something else #do something ifcase
#/bin/bash echo '请输入一个数字' read num case $num in 1) echo '您输入了一个1' ;; 2) echo '您输入了一个2' ;; *) echo '您输入的非1,非2的数字='$num'' esacwhile
#/bin/bash
int=0
while(($int <= 10))
do
echo "数字int=$int"
let "int++" #let 不需要加$
done
//死循环
while true
do
do something
done
# while 与if结合使用,获取用户有效输入
echo '请输入url'
while true
do
read -e url
if [ $url ]
then
break
else
echo 'url输入有误,请重新输入'
fi
done
function
#/bin/bash
function addfun(){
echo '请输入第一额数'
read a
echo '请输入第二个数字'
read b
return $(($a + $b))
}
addfun #调用函数
echo "两个数字之和是:$?" # 函数的返回值可以通过$?获取
实战:编写一个curl工具类,用于测试post,发送json参数请求
实现功能:
- 可以输入请求参数
- 可以输入请求地址
- 执行后记录到日志文件
#!/bin/bash
# curl 工具类,实现post请求
cmd=$1
date=`date +'%F %H:%M:%S.%N'`
log_dir=log
log_file=$log_dir/curl-`date +%F`.log
echo '请输入请求参数request body'
read -e req_param
# read -e :可以退格
echo '请输入url'
while true
do
read -e url
if [ $url ]
then
break
else
echo 'url输入有误,请重新输入'
fi
done
echo "正在请求url:$url ..."
result=
if [ $cmd == 'GET' ]
then
result=`curl -X GET "${req_param}" $url `
else
result=`curl -X POST -d '${req_param}' $url`
cmd='POST'
fi
echo $result
# 判断文件是否存在,不存在创建
if [ ! -e $log_dir ]
then
mkdir -p $log_dir
fi
echo $log_file
echo "$date request-type:$cmd, request-body:$req_param request-url:$url , result:$result" >> $log_file
测试
chmod +x curl.sh ./curl.sh GET



