shell快速入门

来源:互联网 发布:java和php的优缺点 编辑:程序博客网 时间:2024/06/08 15:57

        最近在学习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://////  #显示所有信息