您的位置:首页 > 运维架构 > Shell

shell快速入门

2017-10-31 15:26 330 查看
        最近在学习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://////  #显示所有信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell