shell脚本

一、什么是shell脚本

Shell脚本是一种脚本语言,用于自动化执行一系列的命令和任务。它是由一系列的命令和控制结构组成的文本文件,通过解释器执行。Shell脚本可以执行系统命令、处理文件和目录、控制流程、定义变量和函数等。它是一种非常方便和灵活的工具,常用于系统管理、自动化任务和批处理等场景。shell脚本类似windows的批处理文件,shell脚本就是将连续执行的命令写成一个文件。shell脚本提供数组、循环、条件判断的等功能。shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。

二、shell脚本写法

shell脚本是个纯文本文件,命令从上而下,一行一行的开始执行。shell脚本扩展名为.sh。shell脚本用于编写批处理任务的脚本语言。在shell脚本中,可以使用命令、控制结构和变量来完成各种任务。下面是一个简单的shell脚本的写法示例:

#shell脚本第一行一定要为:
#!/bin/bash
# 这是一个注释,用于解释脚本的功能,表示使用bash。

# 定义变量
name="John"
age=25

# 打印变量的值
echo "My name is $name"
echo "I am $age years old"

# 使用控制结构
if [ $age -lt 18 ]; then
  echo "I am a minor"
else
  echo "I am an adult"
fi

# 使用循环
for i in 1 2 3 4 5; do
  echo "Number: $i"
done

# 调用命令
current_date=$(date +%Y-%m-%d)
echo "Current date: $current_date"

在这个示例中,脚本以#!/bin/bash开头,这是指定脚本在Bash shell下运行的声明。然后定义了两个变量nameage,并使用echo命令打印出变量的值。接下来使用if语句根据年龄判断是否为未成年人,并使用for循环打印出数字1到5。最后使用date命令获取当前日期,并将结果保存到变量current_date中,然后再次使用echo命令打印出当前日期。

这只是一个简单的示例,shell脚本可以做更复杂的任务,比如文件操作、网络通信等。根据具体的需求,可以使用不同的命令、控制结构和变量来完成任务。

三、shell脚本语法

3.1、交互式shell脚本

使用read关键字从shell中获取输入。

当然,以下是一个用Bash语言编写的简单交互式Shell脚本的示例:

#!/bin/bash

# 提示用户输入姓名
echo "请输入您的姓名:"
read name

# 输出欢迎语句
echo "欢迎您,$name!"

在这个示例中,脚本首先使用echo命令打印出提示信息,要求用户输入姓名。然后使用read命令读取用户的输入,并将其保存到名为name的变量中。最后使用echo命令输出欢迎语句,其中的$name会被替换为用户输入的姓名。

要运行这个脚本,可以将其保存为一个文件(例如welcome.sh),然后在终端中使用以下命令执行:

bash welcome.sh

然后脚本会提示用户输入姓名,用户输入后,脚本会输出相应的欢迎语句。

3.2、shell脚本的数值计算

shell仅支持整形,数值计算使用$((表达式))。

shell脚本进行计算a + b:

#!/bin/bash

# 提示用户输入a和b的值
read -p "请输入a的值:" a
read -p "请输入b的值:" b

# 计算a + b的结果
result=$(($a + $b))

# 输出结果
echo "a + b的结果为:$result"

将上述脚本保存为一个.sh文件(例如add.sh),然后在终端中运行该脚本。将被提示输入a和b的值,并且脚本将计算并输出a + b的结果。

3.3、test命令

test命令是一个用于测试文件类型和比较值的Shell命令。它可以用于检查文件的存在性、类型、权限等,也可以用于比较数值的大小、字符串的相等性等。

常见的用法有:

test -e file:判断文件是否存在

test -f file:判断是否为普通文件

test -d directory:判断是否为目录

test -r file:判断文件是否可读

test -w file:判断文件是否可写

test -x file:判断文件是否可执行

test value1 -eq value2:判断两个值是否相等

test value1 -lt value2:判断value1是否小于value2

test string1 = string2:判断两个字符串是否相等

test命令的另一种形式是使用方括号[],例如[ -e file ][ value1 -eq value2 ]。两者功能完全相同,只是使用方式不同。

需要注意的是,test命令和方括号之间需要有空格,并且test命令的返回值为0或1,用于判断条件的成立与否。

例如可以使用test命令或者方括号[]来判断一个目录是否存在。以下是用bash编写一个test命令的例子,判断目录是否存在并给出相应的提示信息:

#!/bin/bash

# 提示用户输入目录路径
read -p "请输入目录路径: " directory

# 使用test命令判断目录是否存在
if test -d "$directory"; then
    echo "目录存在"
else
    echo "目录不存在"
fi

或者使用方括号[]来实现相同的功能:

#!/bin/bash

# 提示用户输入目录路径
read -p "请输入目录路径: " directory

# 使用方括号判断目录是否存在
if [ -d "$directory" ]; then
    echo "目录存在"
else
    echo "目录不存在"
fi

以上代码会让用户输入一个目录路径,然后判断该目录是否存在,并输出相应的提示信息。你可以将代码保存为一个扩展名为.sh的文件,并使用chmod命令给予执行权限后运行。

3.4、中括号[]判断符

在shell中使用方括号[]可以进行条件判断。方括号内的条件可以是数值比较、字符串比较、文件判断等。以下是一些常见的方括号条件判断:

数值比较:

-eq:等于

-ne:不等于

-gt:大于

-lt:小于

-ge:大于等于

-le:小于等于

字符串比较:

=:等于

!=:不等于

-z:空字符串

-n:非空字符串

文件判断:

-e:文件存在

-d:目录存在

-f:普通文件存在

-r:可读

-w:可写

-x:可执行

可以结合逻辑运算符进行复合条件判断,如&&表示与运算,||表示或运算。

&&和||命令:

cmd1 && cmd2 当cmd1执行完并且正确,那么cmd2开始执行,如果cmd1执行完毕错误,那么cmd2不执行。

cmd1 || cmd2 当cmd1执行完毕并正确,那么cmd2不执行,反之cmd2执行。

3.5、默认变量

Shell 的默认变量是一组预定义的特殊变量,这些变量对于 Shell 脚本来说非常有用。以下是一些常见的 Shell 默认变量:

$HOME:当前用户的主目录路径。

$PWD:当前工作目录的路径。

$USER:当前用户名。

$SHELL:当前 Shell 的路径。

$PATH:用冒号分隔的一组目录路径,用于查找可执行文件。

$IFS:用于分隔字符串的内部字段分隔符。

$PS1:Shell 提示符的格式字符串。

$PPID:当前进程的父进程 ID。

$RANDOM:生成一个随机数。

$LINENO:当前代码行的行号。

$0~$n,表示shell脚本的参数,包括shell脚本命令本身,shlle脚本命令本身为$0

$#:#表示最后一个参数的标号。

$@:表$1、$2、$3......

一、shell脚本条件判断

shell脚本支持条件判断,虽然可以通过&&和||来实现简单的条件判断,但是稍微复杂一点的场景就不适合了。shell脚本提供了if then条件判断语句,写法

        if  条件判断 ; then

                 //判断成立要做的事情

        fi

还有if then else 语句,写法

        if  条件判断 ; then

                 //条件判断成立要做的事情

        else

                 //条件判断不成立要做的事情。

        fi

或:

        if  条件判断 ; then

                 //条件判断成立要做的事情

        elif [条件判断]; then

                //条件判断成立要做的事情

        else

                //条件判断不成立要做的事情。

        fi

最后还有case语句

        case $变量 in

                “第1个变量内容”)

                程序段

                ;; //表示该程序块结束!!

                “第2个变量内容”)

                程序段;;

                “第n个变量内容”)

                程序段

                ;;

        esac

判断两个变量是否相等并且文件是否存在:

if [ "$var1" = "$var2" ] && [ -e "/path/to/file" ]
then
    echo "both conditions are true"
else
    echo "at least one condition is false"
fi
 

二、shell脚本函数

shell脚本也支持函数,函数写法如下:

function fname ()

{

        //函数代码段

}

三、shell循环

shell脚本也支持循环,比如 while do done,表示当条件成立的时候就一直循环,直到条件不成立。

while [条件] //括号内的状态是判断式

         do //循环开始

                //循环代码段

        done

还有另外一种until do done,表示条件不成立的时候循环,条件成立以后就不循环了,写法如下:

until [条件]

        do

                //循环代码段

        done

for循环,使用for循环可以知道有循环次数,写法:

for var in con1 con2 con3……

        do

                //循环代码段

        done

for循环数值处理,写法:

for((初始值; 限制值; 执行步长))

        do

                //循环代码段

        done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值