Shell脚本基础

Posted life_start

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本基础相关的知识,希望对你有一定的参考价值。

 

转载自 http://www.cnblogs.com/liyuhui-Z/p/7792108.html

Shell 简介

Shell作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

常常作为批处理命令来使用,用来提高生产效率!

入门

下面是Shell的一段简单入门程序,我们在Linux上面使用vi test.sh然后将下面的代码打进去,运行sh test.sh 即可

#!/bin/bash    

echo "Hello World !"

上面这段程序是输出HelloWorld,其中#!/bin/bash 指定编译器,必须在脚本的第一行,echo输出信息,这里为输出Hello World

如何运行这段程序呢, 第一步首先进入到该脚本所在的目录,比如cd /root/shelltest ,运行命令sh test.sh 这样就可以进行输入了。

程序中的变量

定义全局变量

全局变量一直存在,不会因为切换shell终端或者退出登录而消失,全局变量需要在 /root/.bush_profile 、/etc/bashrc、/etc/profile、/etc/profile.d文件中设置,设置的格式为export name=value

在/etc/profile中定义完成后,需要重新加载配置文件 source /etc/profile

其中在/etc/profile.d设置shell脚本可以在启动shelle客户端的时候就执行这个脚本,这个文件夹中存储的都为脚本。

创建脚本内容如下

则新打开客户端的时候则会执行这个脚本,输出对应的内容。

定义局部变量, 局部变量在退出Shell客户端时会失效

单引号双引号的区别

单引号:原样输出

双引号:如果里面有变量,会输出变量

没有引号:输出变量

传递的参数

可以在调用脚本的时候给脚本传递参数,脚本内使用$1 $2 ...... 接受传递的参数,当参数超过9的时候,需要用花括号括起来 ${10}

特殊的调用参数:

    $0:返回Shell文件名称
    $$:当前脚本的PID
    $#:传递的所有参数
    $@:程序中的所有参数,这是将参数传递给其他程序的最佳方式。
    $! :执行的上一个命令的PID
    $?:上一次指令的返回值
    $_:此命令前面的最后一个参数
    $* :获取所有的参数

不同脚本之间访问变量

使用sh命令启动的脚本,则在脚本结束其内部的属性都会消失,其他的脚本不能访问其内部的属性。

使用source 命令启动脚本,则在脚本结束后其属性不会失效,同时其他的脚本也能访问到。

取消变量

使用unset可以取消变量,这个变量包括环境变量和局部变量

数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 php 类似),数组下标从0开始。

定义数组

    array=(value1 value2 value3)
    
    array_name[0]=value0

读取数组

${array_name[index]}

获取数组中全部的元素

${my_array[@]}

获取数组的长度

${#my_array[*]}

流程控制

if

如果else语句中没有执行语句,不可以写

if condition
then
    command1 
    command2
    ...
    commandN 
fi

------------------

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

------------
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

for

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

while

while condition
do
    command
done

until

类似do-while循环,在最后判断条件,最少执行一次

until condition
do
    command
done

case

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

函数

demoFun(){   // 定义  
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun   // 调用,如果需要传递参数直接在后面跟就好  demoFun 1 2 3
echo "-----函数执行完毕-----"

运算符

  • expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

  • expr 2 + 2 使用方法 , 需要注意的为1.表达式和运算符之间要有空格 2. 需要用``引起来

关系运算符

使用方法:

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi

布尔运算符

使用方法

if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
   echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi

逻辑运算符

字符串运算符

文件测试运算符

以上是关于Shell脚本基础的主要内容,如果未能解决你的问题,请参考以下文章

shell 脚本 片段

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]

常用python日期日志获取内容循环的代码片段

shell脚本引用expect

shell脚本基础

linux学习19 shell脚本基础-bash脚本编程基础及配置文件