最近看了下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. js使用模板快速填充数据

    1.html <!DOCTYPE html> <html> <head> <title>模板标签</title> </head> ...

  2. IIS报错:Exception from HRESULT: 0x8007000B解决方法

    报错如下: System.Web.Services.dll 中发生,但未在用户代码中进行处理 其他信息: 服务器无法处理请求. ---> 尝试加载 Oracle 客户端库时引发 BadImage ...

  3. Uva 10891 经典博弈区间DP

    经典博弈区间DP 题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf 题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能 ...

  4. web api authentication

    最近在学习web api authentication,以Jwt为例, 可以这样理解,token是身份证,用户名和密码是户口本, 身份证是有有效期的(jwt 有过期时间),且携带方便(自己带有所有信息 ...

  5. Mac Mail PGP Setup 如何在苹果电脑上设置安全邮件 良好隐私密码法(英语:Pretty Good Privacy,缩写为PGP)

    背景知识 良好隐私密码法(英语:Pretty Good Privacy,缩写为PGP),一套用于讯息加密.验证的应用程序,采用IDEA的散列算法作为加密与验证之用. 关联文献:https://en.w ...

  6. 【Qt学习笔记】窗口部件整理

    关于Qt中窗口部件的学习 今天开始学习Qt的窗口部件,领略一下Qt的神奇之处,记得2012年的那年冬天,我还学Java呢,现在基本上和Java说再见了,不过对于嵌入式的开发Qt还是举足轻重的,我想趁着 ...

  7. Excel图表的基本类型与选择

    图表类型分成4大类:1. 比较 2. 分布 3. 构成 4. 联系 转载自:https://zhuanlan.zhihu.com/peter-zhang-jie

  8. AfxBeginThread中使用updatedata出错

    原因:MFC对象不支持多线程操作,不能供多个线程进程使用,所以尽量不要在线程里面更新界面. 解决办法: 1.将工程改为release 2.使用控件来SetWindowText 3.在线程里面发送消息 ...

  9. 全面分析 Spring 的编程式事务管理及声明式事务管理

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  10. Linux截屏工具scrot用法详细介绍

    Scrot是Linux命令行中使用的截图工具,能够进行全屏.选取等操作,下面小编将针对Scrot截图工具的用法给大家做个详细介绍,通过操作实例来学习Scrot的使用.   在Linux中安装Scrot ...