shell快速入门

原文: 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:////// #显示所有信息