解释器
解释器是一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行
#!/bin/bash(默认),指定解释器
#!/bin/bash #这是第一个shell脚本 #by uncleyong echo ‘hello, shell'
变量
shell的变量不需要先声明,可以直接使用,eg:a=15
调用变量的话 $a 或者 ${a},建议用后者,这样可以和其它字符串拼接
$?, 判断上一条命令是否成功,0表示成功,其它表示不成功
$0,返回脚本的文件名称
$1-$9,返回对应的参数值
$*,返回所有的参数值是什么
$#,返回参数的个数和
#!/bin/bash #by uncleyong echo "脚本名称:$0" echo "第一个参数是:$1" echo "第二个参数是:$2" echo "一共有多少参数:$#" echo "这些参数是:$*"
常用符号
> ,会覆盖原有的内容
>> ,不会覆盖原有的内容
; ,分号,执行多条命令,cat 1.txt; ls
| ,管道符,ps –ef | grep xxx
&& ,前面的命令执行成功,后面的才可以执行
|| ,前面的命令执行失败,后面的才可以执行
“” ,双引号中的变量输出变量值
‘’ ,单引号中的变量输出本身
`` ,输出命令结果 eg:a=`date`;echo $a
整数运算符
加
expr 1 + 2
echo $[1 + 2]
echo $((1 + 2))
注意: expr加号两边要有空格,a=1;b=2;expr $a + $b; echo $[a+b]; echo $((a+b))
减
乘
除
余
小数
bc计算器
保留多少位小数可以通过scale,echo "scale=2;3/2" | bc
条件判断
文件目录
语法:[ 判断表达式 ],注意,[]内部左右要有空格
-e 目标是否存在
[ -e test.sh ] || touch test.sh
-d 是否为路径
[ -d /root/test ] && echo "/root/test存在"
-f 是否为文件
[ -f test.sh ] && echo "是文件"
权限
-r 是否有读取权限
-w 是否有写入权限
-x 是否有执行权限
[ -x test.txt ] && echo '有执行权限'
字符串
[ `echo '1.2 < 2.1' | bc` -eq 1 ] && echo '小于'
if
#!/bin/bash if [ $1 -eq $2 ] then echo "$1 等于 $2" else echo "$1 不等于 $2" fi
键盘输入分数,显示成绩等级
[ -z STRING ] “STRING” 的长度为零则为真。
2> /dev/null;then,下面判断报错的时候输出到无底洞
#!/bin/bash read -p "请输入你的分数:" score if [ -z $score ];then echo "你还没有输入分数" exit fi if [ $score -ge 0 ] 2> /dev/null && [ $score -lt 60 ];then echo "差" elif [ $score -lt 80 ] 2> /dev/null;then echo "中" elif [ $score -lt 90 ] 2> /dev/null;then echo "良" elif [ $score -lt 101 ] 2> /dev/null;then echo "优" else echo "分数值为0~100之间" fi
case
case 变量 in 值1 ) 执行动作1 ;; 值2 ) 执行动作2 ;; .... esac
输入性别,输出对应的结果
#!/bin/bash echo '请输入性别:' read sex case $sex in '男') echo '帅哥' ;; '女') echo '美女' ;; * ) echo '输入有误请重新输入' ;; esac
键盘输入分数,显示成绩等级
#!/bin/bash case $1 in [0-9]|[0-5][0-9]) echo "差" ;; [6-7][0-9]) echo "中" ;; [8][0-9]) echo "良" ;; [9][0-9]) echo "优" ;; 100) echo "优,太棒了,满分" ;; *) echo "输入不符合规则,分数值为0~100之间" ;; esac
for
#!/bin/bash #打印1-10这10个数字之和 sum=0 for ((i=1;i<11;i++)) do sum=$(($sum + $i)) done echo $sum
while
#!/bin/bash #打印1-10这10个数字之和 sum=0 n=1 while [ $n -lt 11 ];do sum=$(( $sum + $n )) n=$(( $n + 1 )) done echo $sum
输入输出
read -参数
-p:给出提示符,不支持" "换行
-s:隐藏输入的内容
-t:给出等待的时间,超时会退出read
#!/bin/bash read -p "请输入密码:" pass echo '你输入的密码是:'$pass
字体特效
字体色30-37:
echo -e " 33[31m 红色字 33[0m”
背景色40-47:
echo -e " 33[47;34m 白底蓝字 33[0m"
特效
echo -e " 33[1m 高亮度 33[0m"
echo -e " 33[4m 下划线 33[0m"
echo -e " 33[5m 闪烁 33[0m"
#!/bin/bash read -p "`echo -e " 33[31;1;4;5m 请输入您的密码: 33[0m"`" pass echo '你输入的密码是:'$pass
综合应用
见jenkins中编写的shell脚本。 详见自动化持续集成。