Linux/Apache/Nignx

Shell 脚本编程15分钟入门

2023-07-17  本文已影响0人  吴佳浩

Shell 脚本编程教程

1. Shell简介

Shell是一种脚本语言,可以使用脚本来控制系统的各种操作和任务。Shell 脚本包含一系列命令,这些命令组合在一起实现自动化的任务。Shell非常强大和灵活,包含许多操作系统命令和工具。

常见的Shell包括:

Linux系统默认使用bash shell。本文将主要讲解bash shell的脚本编程。

2. 第一个Shell脚本

编写一个简单的Shell脚本来输出"Hello World"。

(1) 新建HelloWorld.sh脚本

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

(2) 运行脚本

$ chmod +x HelloWorld.sh # 添加可执行权限
$ ./HelloWorld.sh 
Hello World!

3. 变量

变量用于存储值,方便重复使用。

(1) 定义变量

name="John"

变量名和等号之间不能有空格。

(2) 使用变量

使用$来获取变量的值:

echo $name

输出:

John

也可以用{}包裹变量名:

echo ${name}

(3) 只读变量

使用readonly命令可以将变量定义为只读:

readonly name

只读变量无法修改。

(4) 删除变量

使用unset命令可以删除变量:

unset name

4. 字符串

字符串可以用单引号或者双引号表示。

(1) 单引号字符串

name='John'

单引号内的任何字符都会原样输出。

(2) 双引号字符串

name="John"

双引号里可以有变量。

echo "Hello $name" # Hello John

(3) 字符串操作

5. 数组

数组可以存储多个值。

(1) 定义数组

names=(John Bob Lucy Tom) 

数组元素之间用空格分隔。

也可以单独定义每个元素:

names[0]=John
names[1]=Bob

(2) 读取数组

使用${数组名[索引]}读取元素:

echo ${names[0]} # John
echo ${names[1]} # Bob

使用@可以获取整个数组:

echo ${names[@]} # John Bob Lucy Tom

(3) 获取数组长度

使用#获取数组元素个数:

echo ${#names[@]} # 4

6. 参数

我们可以向脚本传入参数,在脚本中访问参数。

(1) 向脚本传参数

例如有个test.sh脚本:

echo $0    # 打印脚本名
echo $1    # 打印第1个参数
echo $2    # 打印第2个参数

运行时传入参数:

./test.sh hello world

输出:

./test.sh
hello
world

0获得脚本名,1-9分别得到1-9个参数。10以上的参数需要用{10}表示。

(2) 特殊参数

例如:

#!/bin/bash
echo $# # 2
echo $@ # hello world
echo $* # hello world

7. 运算符

Shell支持多种算术和逻辑运算符。

(1) 算术运算符

a=10
b=20

echo $((a + b)) # 30 
echo $((a - b)) # -10
echo $((a * b)) # 200

支持 + - * / % 等算术运算。

注意expr命令的限制:

expr 10 + 20 # 30
expr 10 \* 20 # 200

expr做字符串连接使用|:

a=hello
b=world
expr $a \| $b # helloworld

(2) 关系运算符

例如:

[ 10 -eq 20 ] # False
[ 10 -gt 5 ] # True

需要注意[ ]表达式和空格。

(3) 逻辑运算符

例如:

[ ! 10 -eq 20 ] # True 
[ 10 -lt 20 -a 10 -gt 5 ] # True

8. 条件判断

条件判断可以决定运行哪些命令。

(1) if语句

if语句最基本的语法:

if [ 条件判断 ]; then
  程序
fi

示例:

count=100
if [ $count -eq 100 ]; then
   echo "Count is 100"
fi

if else语句:

if [条件]; then
  程序1
else
  程序2  
fi

if elif else语句:

if [条件1]; then
   程序1
elif [条件2]; then
   程序2
else
   程序3
fi

(2) case语句

case语句可以匹配多个值:

case $变量名 in
  "值1")
    程序1
    ;;
  "值2")
    程序2  
    ;;
  *)
    默认程序
esac

示例:

read -p "输入1-3:" num
case $num in
  "1")
    echo "你选择了1"
    ;;
  "2")
    echo "你选择了2"
    ;;
  "3")
    echo "你选择了3"
    ;;
  *)  
    echo "你没有输入1-3"
esac

9. 循环语句

循环可以多次执行代码块。

(1) for循环

for循环一般用于遍历数组和字符串。

for 变量 in 值1 值2 ...
do
  程序
done

示例:

for name in Tom John Bill
do
  echo "Hello $name"
done

也可以用{1..10}表示1-10的整数序列。

(2) while循环

while循环通过判断条件来执行循环。

while [ 条件判断 ]
do
   程序
done

示例:

count=1
while [ $count -le 5 ]
do
   echo $count
   count=$((count+1)) 
done

(3) until循环

until循环与while相反,条件为false时执行循环。

until [ 条件判断 ]
do
   程序  
done

10. 函数

函数可以封装代码片段实现代码重用。

(1) 定义函数

function fun_name() {
  #代码
}

也可以:

fun_name() {
  #代码 
}

示例:

function sayHello() {
   echo "Hello $1"
}

(2) 调用函数

直接使用函数名调用:

sayHello "John" # Hello John

函数可以接收参数,在函数内部通过1,2等来引用参数。

函数也可以返回值通过$?。

11. 输入/输出

Shell提供了输入和输出的命令。

(1) 输出

例如:

echo "Hello"
read name
echo "Hello $name"

运行结果:

Hello
John # 用户输入
Hello John

(2) 文件输入输出

例如:

cat file.txt | grep 'hello' >> result.txt

12. 实战范例

下面通过一些实例,来实战运用Shell脚本:

(1) 备份脚本

编写一个脚本,完成文件夹的压缩打包备份:

#!/bin/bash

# 获取当前日期
date=$(date +%Y%m%d) 

# 文件备份路径
archive_dir="/data/backup/$date"

# 如果备份目录不存在,创建目录
if [ ! -d "$archive_dir" ]; then
  mkdir -p $archive_dir
fi

# 压缩打包文件
tar -czf "$archive_dir/archive.tar.gz" /data/

echo "Done"

(2) 监控脚本

编写一个简单的监控脚本,每隔1秒查询一次系统负载:

#!/bin/bash

while true
do
  load=$(uptime | awk '{print $8,$9,$10}')
  echo "$(date) Load: $load"
  sleep 1
done  

可以看到实时输出系统负载信息。

(3) 下载脚本

使用wget命令编写一个批量下载文件的脚本:

#!/bin/bash

URL_LIST=url_list.txt

while read line; do
  wget $line
done < $URL_LIST

url_list.txt内每行包含一个下载链接。

总结

以上内容总结了Shell脚本的基本语法和功能,可以通过实际的例子熟练掌握Shell编程
在本文的Shell脚本编程教程中,我们学习了以下主要内容:

  1. Shell简介:介绍了Shell是一种脚本语言,以及常见的Shell类型。

  2. 第一个Shell脚本:编写了一个简单的Shell脚本输出"Hello World"。

  3. 变量:学习了如何定义、使用和删除变量,并了解了只读变量的概念。

  4. 字符串:探讨了单引号和双引号字符串的使用,并介绍了字符串操作的一些技巧。

  5. 数组:了解了如何定义、访问和获取数组的长度。

  6. 参数:学习了如何向脚本传递参数,并了解了特殊参数的用法。

  7. 运算符:探讨了算术、关系和逻辑运算符的使用。

  8. 条件判断:学习了if、if else和case语句的使用,以及如何在Shell中进行条件判断。

  9. 循环语句:介绍了for、while和until循环的使用。

  10. 函数:学习了如何定义和调用函数,并了解了函数的参数和返回值。

  11. 输入/输出:了解了如何进行输出和输入操作,以及文件输入输出的基本命令。

  12. 实战范例:通过备份脚本、监控脚本和下载脚本的实例,展示了Shell脚本在实际应用中的用途。

总的来说,本程教程包含了基本的语法和实战示例,适合初学者入门,同时也可供有经验的开发者回顾和复习Shell脚本编程的知识。通过学习这些内容,读者可以掌握Shell脚本的基本用法,并在实际项目中运用这些知识来完成自动化任务和系统管理工作。

上一篇下一篇

猜你喜欢

热点阅读