最近看了下Shell脚本。曾经遇到很多现成的工具包里边就多次用到了Shell脚本。总之这东西的作用无非就是将一系列的操作进行整合。

·整合后使得一套工作更加模块化规范化。

·批量处理要比手动操作快得多。

Shell脚本虽说是脚本,但是它和一些常规的脚本相比差别还是蛮大的。主要原因是因为shell脚本需要整合命令。

来看一段:

#!/bin/bash

path=`pwd`

echo $path

unset path

cd "../../"

path=`pwd`

echo $path

输出结果:

/home/rockderia/桌面/shells/git/rock_shells
/home/rockderia/桌面/shells

上述的代码中看到,可以直接将 cd "../../"诸如此类的命令行语句直接镶嵌在脚本当中。所以就注定shell脚本的解释器要比较奇怪一些。

我们来一点一点了解一些简单的shell语法,不说能写出漂亮的shell,至少再看见.sh的时候不要萌比。

[规范][注释] [变量] [打印] [传参] [输入] [数组] [文件] [重定向] [逻辑控制] [甩锅]

1.规范

一般而言我们使用的shell脚本都是bash shell,脚本文件的扩展名是 .sh , 第一行需要写 #!/bin/bash 。

执行的话,要用诸如 ./xxx.sh 的方式进行

2.注释

以#开头的一行

# 这行是注释

3.变量

变量的声明

声明的时候格式是 变量名=

注意变量名和等号之间不能有空格,此外,变量名前边不要加 $

变量的使用

这里和PHP比较相似比如

name="rockderia"
echo $name 

变量的类型

一般变量只有两种类型 数字和字符串还有文件 这个一般声明的时候不做区分的,因为他们的运算符都是不一样的,所以解释器会根据使用时用的哪种运算符去还原类型。

4.打印

echo 可以直接用来打印

此外还有一种printf函数打印的方式,那里边就支持占位符之类的格式化操作了。

5.传参

执行脚本的时候可以随意传参 比如

./one.

那么 $1的值就是 "one" $3的值就是10

6.输入

read 可以接受控制台输入数据

read number

7.数组

数组的声明:

array_list=(1,2,3,4,5)

取值

${array_list[1]}

数组的长度

${#arrat_list[*]}

8.文件

直接给一个变量赋值一个文件的地址即可,比如

file="./one.txt"

9.重定向

可以直接将echo的内容重定向给文件变量

echo "into file" > $file

10.逻辑控制

因为shell中针对文件,字符串,和数字是没有类型的概念的,但是你操作的时候根据你的操作解释器会默认这个变量的类型。比如你执行

let "sum=$sum+1"

字符串和文件才不可能执行 + 这样的操作,所以默认就是数字了

又比如

if [ -e $file ]

这时候用到的是文件的逻辑运算符 -e 所以也就默认这个$file变量是文件了。

编写实例:

if逻辑

read number_1
read number_2

if test $number_1=$number_2
then
echo "两个数字是相等的";
else
echo "两个数字不相等";
fi

if test -e ./files/rock.txt
then
echo "文件存在";
else
echo "文件不存在";
fi

循环结构

;
temp=;

i=;
;i<=;i++))
do
let "temp=$i*$i";
let "sum+=$temp";
done

echo "the result is "$sum;

filearray=`ls ./files/*.txt`;

for file in $filearray
do
echo $file
done

11.甩锅

最后祝您......

因为可以把其他的执行语句随意的插入到shell脚本当中,所以我们有的时候也可以拜托高级语言或者其他熟悉的脚本执行一些操作。这正是shell的强大与灵活之处。

比如我们可以写一个c++文件

#include<stdio.h>

typedef char* str;

int main(int argc, char* argv[])
{
    str* ];
    )
    return -;
    head++;
    ; i < argc; i++)
    {
        printf("%d-",i);
        printf(*head);
        printf("\n");
        head++;
    }
}

上述的文件把接受的参数全部打印出来,当然我们可以用c++去执行更多的功能,毕竟参数都已经传递进来了。我们把它编译成可执行文件.out。接下来我们编写shell脚本

#!/bin/bash

param1="home"
param2="my"

./cpp/a.out ${param1} ${param2}

echo "end"

就像这样,我们执行这个shell脚本就会获得如下结果:

-home
-my
end

博主的测试代码入口:https://github.com/RockDeria/rock_shells.git

Shell脚本快速入门的更多相关文章

  1. shell脚本快速入门----shell基本语法总结

    1.#!脚本的开头 #!/bin/bash 2.脚本属性 添加可执行属性,chmod +x 或使用"."运行,例如运行当前目录下的a.sh 可执行命令 ". ./a.sh ...

  2. shell脚本快速入门----正则表达式

    一. "." 符号 (一个英文句号) 用于匹配换行符之外的任意一个字符 如 root 可用r..t来匹配 二. "*"符号 重复匹配前一个字符 如ab abc ...

  3. 【转载】MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法

    原文地址:MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法 作者:mchdba 某个初级dba误删index,mysql漫山遍野全是10S以上的慢sql,mysql ...

  4. 08 bash特性--shell脚本编程入门

    shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...

  5. shell脚本从入门到精通

    阿里云大学 shell脚本从入门到精通 第1 章 : shell脚本编程-变量-算术表达式-判断语句-if分支语句 第2 章 : case-for-While-双括号-循环嵌套-break-conti ...

  6. shell脚本从入门到精通(初级)之入门篇

    写在开头 本文是阅读<Linux命令行与shell脚本编程大全>时的一些笔记,主要是shell脚本的一些基本语法, 还有很多细节和高级内容没有写到. 笔者也是shell script菜鸟, ...

  7. 利用shell脚本快速定位日志

    我们平时查日志,在测试环境,日志文件只有几个的情况下,我们可以通过找时间接近的文件然后根据关键词定位报错位置,大不了都查一遍,这都可以忍受.但是在实际的生产环境下,服务器集群部署,每天的日志非常多非常 ...

  8. shell脚本从入门到精通(中级)之提高篇

    shell 脚本入门到精通(中级) 一.shell 脚本的执行 二.输出格式化 三.数据类型 四.重定向 五.变量 一.shell 脚本的执行 1. 脚本执行的4种方法 $ ls /tmp/test. ...

  9. shell脚本快速配置yum源

    我们在使用Red Hat系列的Linux系统时经常要配置yum源,本文档提出一个快速配置yum源的方法,就是用shell脚本来实现. 我们在使用Red Hat系列的Linux系统时经常要配置yum源, ...

随机推荐

  1. If you only do what you can do you'll never be more than you are now.

    If you only do what you can do you'll never be more than you are now. 如果你只是做你力所能及的事,你将不会有所进步:

  2. js date 火狐不兼容 解决办法 火狐版本25,0

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  3. Linux启动过程详述

    http://www.ibm.com/developerworks/cn/linux/kernel/startup/index.html Linux启动第1步:引导内核 Linux启动第2步:内核部分 ...

  4. HQL查询——聚集函数

    HQL查询--聚集函数 HQL也支持在选出的属性上使用聚集函数.HQL支持的聚集函数与SQL的完全相同: (1)avg:计算属性平均值: (2)count:统计选择对象的数量: (3)max:统计属性 ...

  5. 阅读笔记 火球——UML大战需求分析 2

    从大一一开始接触C++的时候,上课模模糊糊的听王辉老师讲,我们第一学期学的是面向过程,第二学期学的是面向对象,迷迷糊糊的上了一年,到了大二的时候,对这个面向什么没有什么深层次的理解.知道学了JAVA ...

  6. python re模块

    re模块主要用于查找.替换.分割 print(re.__doc__) 特殊字符(元字符): "." 任意一个字符,除换行符(\n) "^" 字符串开头 &quo ...

  7. [OC][地图] 高德地图之定位初探(一)

    使用前的说明 高德地图开放平台的iOS定位模块网址-->http://lbs.amap.com/api/ios-location-sdk/summary/ 高德地图有Web端.android平台 ...

  8. My first python script for work

    I write it yesterday to watch the NE process(rcpfd,cfgd) automatically, then i will write a window t ...

  9. Lucene 简单API使用

    本demo 简单模拟实现一个图书搜索功能. 模拟向数据库添加数据的时候,添加书籍索引. 提供搜索接口,支持按照书名,作者,内容进行搜索. 按默认规则排序返回搜索结果. Jar依赖: <prope ...

  10. 使用VC++ ATL实现iStylePDF的COM插件

    本文介绍了一种使用VC++ ATL(Active Template Library),利用ISPExtensibility接口,为 iStylePDF 加入功能简单的COM插件(addin),加入工具 ...