系列文章目录



前言

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

由于习惯的原因,简洁起见,本文出现的 “shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身

二、如何运行shell脚本

栗子

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

输入一些代码,第一行一般是这样:

#!/bin/bash
echo "Hello World !"

方法

1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh
/bin/php test.php
如下图是我们的运行截图:
在这里插入图片描述

shell脚本语法

1.变量

语法:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线 _。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

示例代码:

#!/bin/bash
yourname="666"
echo "your name is $yourname"

运行结果:
在这里插入图片描述
注意:定义时不用加“ $ ”,引用时需要加" $ "

2.输入输出

语法

输出命令echo
echo -e 开启转义,可以对以下字符进行转义

\a 发出警告声; 
\b 删除前一个字符; 
\c 最后不加上换行符号; 
\f 换行但光标仍旧停留在原来的位置; 
\n 换行且光标移至行首; 
\r 光标移至行首,但不换行; 
\t 插入tab; 
\v 与\f相同; 
\ 插入\字符; 
\nnn 插入nnn(八进制)所代表的ASCII字符;

echo -n 不换行输出

输入命令 read
-p 提示语句,后面接输入提示信息,这里为’Enter Password: ’
-n 参数个数,有时候要限制密码长度,或者其他输入长度限制,比如[Y/N],只输入输入一位,-n1
-s 屏蔽回显,屏幕上不显示输入内容,一般用于密码输入
-t 等待时间,这里设置30秒,30秒内未输入或者输入不全,终止
-d 输入界限,这里是 ,输入到 ,输入到 ,输入到,自然终止输入
-r 屏蔽特殊字符\的转译功能,加了之后作为普通字符处理

示例代码:

#!/bin/bash
read -p "pleadse input your name" yourname
echo "your name is $yourname"

运行结果:
在这里插入图片描述
注意:read的变量前面不要加"$"

3.Shell 传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):

#!/bin/bash

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

运行结果:
在这里插入图片描述
特殊处理:
在这里插入图片描述

4.test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

数值测试

在这里插入图片描述
示例:

#!/bin/bash
read -p "please input two int num:" first second
test $first == $second && echo "$first = $second" || echo "$first != $second"

运行结果:
在这里插入图片描述

字符串测试

在这里插入图片描述

文件测试

在这里插入图片描述

5.Shell 流程控制

if else

语法格式:

if condition
then
    command1 
    command2
    ...
    commandN 
fi
if else-if else 语法格式:
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

if else 的 […] 判断语句中大于使用 -gt,小于使用 -lt。

if [ "$a" -gt "$b" ]; then
    ...
fi

如果使用 ((…)) 作为判断语句,大于和小于可以直接使用 > 和 <。

if (( a > b )); then
    ...
fi
示例
#!/bin/bash
read -p "please input two int num:" first second
if [ "$first" == "$second" ]
then
    echo "$first = $second"
elif (($first > $second))
then
    echo "$first > $second"
else
    echo "$first < $second"
fi

运行结果:
在这里插入图片描述

for循环

与其他编程语言类似,Shell支持for循环。
for循环一般格式为:

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

示例:

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

输出结果:

The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5

示例2:
输入一个整数,输出1+2+。。。+n的结果

#!/bin/bash
read -p "please input int num:" num
count=0
for((i=0; i<=num; i=i+1))
do
    count=$(($count+$i))
done

echo "1+2+3+...$n = $count"

在这里插入图片描述

while 语句

while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。其语法格式为:

while condition
do
    command
done

until 循环

until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
until 语法格式:

until condition
do
    command
done

case … esac

case … esac 为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。
可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case … esac 语法格式如下:

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

跳出循环

break 命令
break 命令允许跳出所有循环(终止执行后面的所有循环)。
下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。
continue
continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

6.Shell 函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
shell中函数的定义格式如下:

[ function ] funname [()]
{
    action;
    [return int;]
}

说明:

1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255


总结

本篇文章对shell命令做一个简单的总结,如果对shell编程有兴趣可以参考:菜鸟教程-shell编程