shell编程
852
|
2020-06-10 17:58:33
#!/bin/bash
#代码注释
#单行 #
#多行
:<<!
注释
注释
!
#变量声明
#字母,数字,下划线 第一个不能为数字
f_name="yyf"
#等号两边不能有空格(不同于php)
#条件判断与比较
:<<!
数字类型关系运算
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
布尔类型
! 非
-o 或
-a 与
逻辑运算
&& and
|| or
字符串运算符
= 左右字符串是否相等
!= 不相等
-z 长度是否为0
-n 长度是否不为零
$ 不为空返回true
if [ 条件 ];then
表达式
elif [ 条件 ];then
表达式
else
表达式
fi
为真时后面必须有then,表达式不能为空,结束要有fi
文件运算(常用)
-d 是否为目录
-f 是否为文件
-r 是否可读
-w 是否可写
-x 是否可执行
-s 文件是否为空
-e 文件是否存在
!
#判断目录是否为空
dir="/root/test"
if [ "`ls -A ${dir}`" = "" ]
then
echo "${dir} 目录为空"
else
echo "${dir} 目录不为空"
fi
#接收参数 ./test.sh 1 2 3
$1 $2 $3 分别代表1 2 3
#数组
arr_name=(1 2 "ss")
echo ${arr_name[0]}
echo ${arr_name[*]}
arr_name[0]=3
#输出所有元素
echo ${arr_name[*]}
#输出数组长度
echo ${#arr_name[*]}
#算术运算 `expr 运算表达式`
#+ - * / % = == !=
a=10
b=30
ab_sum=`expr ${a} + ${b}`
echo ${ab_sum}
#交互
echo "please input your name"
read name
echo "hello ${name}"
#操作数据库实例
declare -A _mysql
_mysql=([username]="root" [pwd]="" [db]="v7")
echo "input mysql password for ${_mysql[username]}"
read _mysql[pwd]
_sql="SELECT id,title,create_time FROM \`article\` ORDER BY id DESC LIMIT 10"
query_data=`mysql -u${_mysql[username]} -p${_mysql[pwd]} ${_mysql[db]} -e "${_sql}"`
echo ${query_data}
2>/dev/null 隐藏错误信息
if cd /home/blog 2>/dev/null #当文件加不存在时不会报错
then
echo "now in dir"
else
echo "dir is not exist"
fi
测试
# if test | if [] | if [[]] |if command
#if test | if [] | if [[]]作用类似,推荐使用if [[]](3.x)
:<<!
用[[ ... ]]测试结构比用[ ... ]更能防止脚本里的许多逻辑错误。比如说,&&,||,<和>操作符能在一个[[]]测试里通过,但在[]结构会发生错误。
!
if [[ $n -gt 10 && $n -lt 100 ]]
then
#...
else if [[]]
then
#...
else
#...
fi
#if command 返回命令执行后的退出码
if echo $n | grep -q '[^0-9]'
then
echo "is number"
else
echo "not a number"
fi
#if ((...)) 测试算术表达式
if (( 1 < 2 ))
then
#...
fi
常用文件测试
-e #文件是否存在
-a #文件是否存在,不建议使用
-f #普通文件
-s #文件大小不为0
-d #是否为目录
-b #文件是否为块设备 软盘光驱等
-c #文件是否为字符设备 键盘声卡调制解调器等
-p #文件是一个管道
-h #文件是一个符号链接
-L #文件是一个符号链接
-S #文件是一个socket
-r #是否可读
-w #是否可写
-x #是否可执行 与-r -w 一样都是值当前用户
-O #是文件拥有者
-G #所在组id与文件的组id相同
-N #文件最后一次读后被修改
f1 -nt f2 #文件f1比f2新
f1 -ot f2 #文件f1比f2旧
f1 -ef f2 #文件f1和f2是相同的硬链接
! #上述测试结果取反
浮点数计算
n=$(echo "scale=4; 4/3" | bc) #浮点数需要用bc,scale为精度
echo $n
代码段
小部件
代码段 小部件
代码段 小部件
代码段 小部件