原文: https://blog.csdn.net/xyz_dream/article/details/78403962
最近在学习shell脚本。总结一下快速入门的经验。如果你是纯小白/大佬请忽略此博文。小白看不懂,大佬看太简单,原因是这
个。 学习一门语言其实在有其它语言的基础上学习,很短时间内稳稳地入门。现在假设你已经有了其它语言的基础,无论是Java
,JavaScript,还是PHP。学习起来十分快速,网上找了很多信息要不讲得太细,要不讲得太粗略。作为一个非专业运维人员,其实入门
水平,会编写基本shell脚本就够用了。因为shell本身就不是像其它高级程序设计语言,它只是辅助运维。自然不存在所谓的面向对象
以及非常多的函数。废话不多说,进入正题
先来个”Hello Wolrd” Demo实例,看看一个shell脚本长什么样。
#!/bin/bash # 约定使用哪个解释器执行
echo “Hello Wolrd”; #输出 Hello World #是注释
1.最基本书写和使用例子
#!/bin/bash 约定使用/bin/bash解释器
echo -e “hello word”; //输出 hello world -e换行输出
引入外部脚本文件: source ../../shell2.sh
2.变量的定义和使用
规则: 数字,字母,下划线 数字不能开头
定义变量: var=”hello world” # 定义一个变量为”hello world”字符串 在 shell中 默认所有的值都是字符串,所以数值计算后面特殊讲解
使用变量: echo $var; # 在前面加$符号即可
export #定义环境变量
env 查看系统环境变量 使用 :分隔
set #显示所有变量 -u 若使用不存在的变量会出现错误提示
unset var; #删除变量
3.常量
readonly var=”hello world”; #定义常量
4.数值计算
a=1;
b=2;
4.1 $(( $a + $b )) #计算a+b的值 双括号
4.2 $[$a+$b] # 使用 $[] 括起来也可以进行计算
let a=1+2 #计算值
a = expr 1 + 2
; #计算值
计算以及变量类型声明:
declare [+/-] -a 给a赋值属性 +a取消属性
-a 数组array
-i int
-x 环境变量
-r 只读变量
-p 显示指定变量的被声明的类型
定义关联数组: declare -A arr
arr=([key1]=value1 [key2]=value2 [key3]=value3);
for key in ${!arr[]} 获取数组的所有key
declare -p $cc //查查看变量cc的数据类型
5.测试条件 test a -eq b ==> [ a -eq b ]
5.1.文件类型判断:
-d 存在且是目录
-e 文件存在
-f 文件且普通文件
-r 存在且可读
-w 存在且可写
-x 存在且可执行
[ -e /root/file.txt ] //判断文件是否存在
[ -d /root ] && echo “yes” || echo “no” //目录存在就输出yes
5.2. 字符串判断
= 等于
!= 不等于
-z 空字符串返回true
-n 不空返回true
5.3 数字判断
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
6.控制流程 if then —else fi case ….
if [条件]
then
程序
fi
if [];then
程序
fi
case var in
1):
….
;;
2):
…..
;;
):
….
;;
esac
-a -o ! #逻辑运算符 与 或 非 用在表达式
&& || #用在命令执行情况 例如 wget “http://….” && echo “hello”
7.循环 for ((i=0;i<10;i++)) for index in arr while
8.文件读取和存储文件信息
cat “find”;
9.函数 function
#函数定义 关键字function 方法名称
function function_name()
{
$1 $2 $ # 获取参数信息
return # 返回结果 return 只能返回数字不能是字符串之类的东西
}
#函数的调用
function_name 1 2 3 4 5 #传入的参数
#获取函数返回结果
resulr=$?; #获取结果
10.向shell脚本传递参数
接收外部参数: $0-$9 $0代表命令本身 $1代表第一个参数 ${10} 第10个参数
$ $@ //获取所有参数
$# //返回参数个数
预定义变量:
$? 查看上次执行命令的返回结果。0是正常 非0就是不正确
$$ 当前进程号
$!
输入参数:
read -p “提示” -t 超时时间(20) -n 字符数(10) -s 密码输入 -a输入的数字进入数组 -d “:” 以”:”输入表示结束
定时器: 利用sleep来实现
while true
do
sleep 1;
echo date
; #每隔1秒打印输出时间
done
时间格式化: date “+%Y-%m-%d %H:%M:%S”
定时服务: yum install crontabs
service crond start #开启定时服务
crontab -e 写入定时任务
分钟 小时 天 月 星期 要执行的命令
commond
/10 每隔10分钟
创建定时脚本: name.cron
crontab name.crom #添加定时任务
crontab -l #测试定时任务十分添加成功
exit #结束脚本执行
return #结束函数执行
vim技巧:
gg [[ 跳到行首
]] 跳到行尾
x 删除一个字符
dd 删除一行
i 在前面插入
a 在后面插入
u 撤销
o 下一行插入
q! 不保存修改
e! 恢复文件初始内容 不保存修改
$ 跳转到该行行尾
^ 跳转到行头
yy 复制一行
y 复制
p 粘贴
Ctrl+ f 往下翻页
Ctrl+ b 往上翻页
:set hlsearch #高亮显示搜索
搜索 : ?关键词 / 关键词
替换: :s(switch) /old /new/ g(全局global) 替换old变成new 5,10 s/old/new/g 5-10行替换
dpkg -i **.deb //安装
dpkg -r tree //卸载
dpkg -l //查看已安装
rpm -qa //查看安装的rpm包
yum list installed //查看已安装的软件
chkconfig –list //查看服务列表2017/10/31 星期二2017/10/31 星期二
chkconfig service on #设置开机启动
reset //彻底清屏
wget和curl:模拟post请求
wget –post-data=”user=zhangsan&age=40” http://www.baidu.com/post
curl -i http:////// #显示所有信息