语言类型
编译型:
C C++ go java等等
解释型:
python perl php shell bash
定义变量方式
直接赋值:
名=值 ##无空格,不能有特殊字符,变量名不能以数字开头,名最好使用驼峰语法,不能与系统命令冲突
传参:
传递参数--位置变量
交互式设置变量:
read命令
-p 设置提示信息
-t 设置超时时间,秒
-s 关闭回显,加密你的输入
[root@jenkins scripts]# echo $pass
[root@jenkins scripts]# read -p 'biubiubiu:' -t 10 -s pass
biubiubiu:
[root@jenkins scripts]# echo $pass
wo shi ni ba ba
变量类型
自定义:用户变量,普通变量,局部变量 .bash_profile .bashrc
环境:全局变量 /etc/profile /etc/bashrc
位置:$1、$2、$3......$9、${10} ##两位数的位置变量必须使用花括号
特殊: $# 命令行中位置参数的个数
$@ 不加双引号与$#作用相同,”$@”则表示将所有参数视为不同的独立字符串,相当于 “$1” ”$2” ”$3”...,这是将参数传递给其他程序的最佳方式
$* 所有位置参数的内容
$? 返回上一条命令的状态,0 正常,其他 异常
$0 当前执行的脚本或程序名称
$_和$! 显示上一条命令的最后一个参数
$$ 获取执行上一个命令语句的返回值 (0为成功,非0为失败)
[root@jenkins scripts]# for i in $*;do echo $i;done
I
am
handsome
boy..
[root@jenkins scripts]#
[root@jenkins scripts]# for i in $@;do echo $i;done
I
am
handsome
boy..
[root@jenkins scripts]# for i in "$*";do echo $i;done
I am handsome boy..
[root@jenkins scripts]# for i in "$@";do echo $i;done
I am
handsome
boy..
expr
运用变量进行简单的整数运算
expr 变量1 运算符 变量2 ……
运算符:+加 -减 \*乘 /除 %取余
函数
把命令集合到一起,用函数名作为命令调用命令集合的结果
可以在脚本里调用,也可以在命令行调用,命令行的话需要source一下
数组
注
echo ${renyi} ##最好使用变量时候加上花括号,因为 金庸新著
正常是用花括号分隔,但是 . 也能分隔
unset 删除变量、环境变量与函数
-f 仅删除函数
-v 仅删除变量
wc -L ## -L:获取文件中最长一行的内容的长度
定时任务的脚本加上 source /etc/profile 放置执行失败的情况
$() 支持嵌套
`` 不支持嵌套
变量的字串:返回变量的长度
条件表达式
[ 条件表达式 ]
文件测试:
-d 目录(是否为)
-f 文件
-s 非空文件
-e 存在
-L 链接文件
-r 读取权限
-w 写入权限
-x 执行权限
字符串比较:
-z 字符串长度为0,则真
-n 字符串长度不为0,则真
= 第一与第二个字符相同
!= 第一与第二个字符不相同
整数值比较:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
(e等,n不,g大,l小,)
逻辑测试:
|| 逻辑或(或者) -o
&& 逻辑与(而且) -a
! 逻辑否(不)
if
单分支:
if [ 条件测试操作 ]
then(如果正确则)
命令序列
fi
双分支:
if [ 条件测试操作 ]
then(如果正确则)
命令序列1
else(不然则)
命令序列2
fi
多分支:
if [ 条件测试操作1 ]
then(如果条件1正确则)
命令序列1
elif [ 条件测试操作2 ]
then(如果条件2正确则)
命令序列2
......(可以有很多个elif)
else(不然则)
命令序列3
fi
case条件语句
输入的变量值匹配到哪个模式,就执行哪个模式下的命令序列
case 变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
模式3)
命令序列3
;;
...更多模式...
*)
默认命令序列
esac
for循环语句
for 变量名 in 取值列表
do
命令序列
done
## 批量创建用户并设置随机八位密码
## 过滤指定某些服务进行操作
for循环:指定循环条件,循环条件不满足会停止循环
while循环:指定循环条件,循环条件满足时,会无限循环(实现死循环)
until循环:指定循环条件,循环体检不满足时,会无限循环
脚本在无限循环执行时:
利用ctrl+z,只是暂停脚本运行(暂停的进程)
jobs --- 前台运行脚本命令,若放入后台,可以通过jobs命令查看
while循环
while [ 条件测试操作 ]
do
命令序列
done
例:
while true
do
uptime
sleep 60
done
break n ##n表示跳出循环的层数,如果省略n表示跳出整个循环
continue n ##n表示退出到第n层继续循环,如果省略n表示跳过本次循环,忽略本次循环的剩余代码,进入下一次循环
exit n ##退出当前shell程序,n为返回值,也可以省略,在下一个shell里通过$?接收这个n的值
return n ##在函数里,作为函数返回的值,用于判断函数执行是否正确。和exit一样,如果函数里循环,也会直接退出循环,退出函数(不执行后面的函数),控制返回值
let
是一个执行测试的语句
let 变量++ ##变量自身加1
let 变量-- ##变量自身件2
let 变量+=值 ##等价于 变量=变量+值
小结
1.while循环的特长是执行守护进程以及我们希望循环不退出持续执行,用于频率小于一分钟循环处理(crond),其他的while循环几乎都可以被for循环代替
2.case语句可以被if语句替换,一般在系统启动脚本传入少量固定规则字符串用case语句,其他普通判断多用if
3.一句话,if、for语句最常用,其次while(守护进程)、case(服务启动脚本)
脚本调试
1.windows脚本传到linux之后用不了:
[root@shell scripts]# yum -y install dos2unix
[root@shell scripts]# dos2unix windows.sh
dos2unix: converting file windows.sh to Unix format ...
[root@shell scripts]# sh windows.sh
2.测试局部脚本字段
3.-x 参数
1)
2)
加色
字体加颜色
echo -e "\033[30m 黑色字 trainning \033[0m"
echo -e "\033[31m 红色字 trainning \033[0m"
echo -e "\033[32m 绿色字 trainning \033[0m"
echo -e "\033[33m 黄色字 trainning \033[0m"
echo -e "\033[34m 蓝色字 trainning \033[0m"
echo -e "\033[35m 紫色字 trainning \033[0m"
echo -e "\033[36m 天蓝字 trainning \033[0m"
echo -e "\033[37m 白色字 trainning \033[0m"
背景加颜色
echo -e "\033[40;37m 黑底白字 welcome \033[0m"
echo -e "\033[41;37m 红底白字 welcome \033[0m"
echo -e "\033[42;37m 绿底白字 welcome \033[0m"
echo -e "\033[43;37m 黄底白字 welcome \033[0m"
echo -e "\033[44;37m 蓝底白字 welcome \033[0m"
echo -e "\033[45;37m 紫底白字 welcome \033[0m"
echo -e "\033[46;37m 天蓝白字 welcome \033[0m"
echo -e "\033[47;30m 白底黑字 welcome \033[0m"