Linux

Shell 编程,一篇就够了

2020-01-10  本文已影响0人  阙馨妍子

本文首先介绍了 Shell 编程是什么,并带大家快速入门,随后讲解 Shell 的基本语法并结合案例重点分析用法,包括 Shell 流程控制和自定义函数。建议收藏。

谁需要学习 Shell 编程?

  1. Linux运维工程师:编写Shell程序进行服务集群管理。
  2. Python和JavaEE程序员:编写Shell脚本程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
  3. 大数据程序员:编写Shell程序来管理集群。

Shell 是什么?

Shell 是一个命令解释权,它为用户提供了一个向 Linux 内核发送请求以便运行程序界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。

Shell 编程快速入门

进入 Linux 终端,编写一个 Shell 脚本 hello.sh :

#!/bin/bash
echo 'hello world!'

运行:

// 方法1
# sh hello.sh

// 方法2
# chmod +x hello.sh
# ./hello.sh

终端打印出 hello world!

说明:

Shell 变量

定义

Shell 变量分为系统变量自定义变量。系统变量有$HOME、$PWD、$USER等,显示当前 Shell 中所有变量:set
变量名可以由字母、数字、下划线组成,不能以数字开头。

基本语法

将命令返回值赋给变量(重点)

Shell 环境变量

定义

基本语法

  1. export 变量名=变量值,将 Shell 变量输出为环境变量。
  2. source 配置文件路径,让修改后的配置信息立即生效。
  3. echo $变量名,检查环境变量是否生效

位置参数变量

基本语法

实例:

编写 Shell 脚本 positionPara.sh ,输出命令行输入的各个参数信息。

#!/bin/bash    
# 输出各个参数
echo $0 $1 $2
echo $*
echo $@
echo 参数个数=$#

运行:

# chmod +x positionPara.sh
# ./positionPara.sh 10 20

运行结果:

positionPara.sh 10 20
10 20
10 20
参数个数=2

预定义变量

定义

在赋值定义之前,事先在 Shell 脚本中直接引用的变量。

基本语法

实例:

编写 Shell 脚本 prePara.sh ,输出命令行输入的各个参数信息。

#!/bin/bash    
echo 当前的进程号=$$
# &:以后台的方式运行程序
./hello.sh &
echo 最后一个进程的进程号=$!
echo 最后执行的命令结果=$?   

运行结果:

当前的进程号=41752
最后一个进程的进程号=41753
最后执行的命令结果=0
# hello world!

运算符

基本语法

实例

# 第1种方式 $(())
echo $(((2+3)*4))

# 第2种方式 $[],推荐
echo $[(2+3)*4]

# 使用 expr
TEMP=`expr 2 + 3`
echo `expr $TEMP \* 4`

条件判断

基本语法

[ condition ] 注意condition前后要有空格。非空返回0,0为 true,否则为false 。

实例

#!/bin/bash
if [ 'test01' = 'test' ]
then
    echo '等于'
fi

# 20是否大于10
if [ 20 -gt 10]
then
    echo '大于'
fi

# 是否存在文件/root/shell/a.txt
if [ -e /root/shell/a.txt ]
then
    echo '存在'
fi

if [ 'test02' = 'test02' ] && echo 'hello' || echo 'world'
then
    echo '条件满足,执行后面的语句'
fi

运行结果:

大于
hello
条件满足,执行后面的语句

流程控制

if 判断

基本语法

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

# 或者(推荐)
if [ 条件判断式 ]
then
    程序
elif [ 条件判断式 ]
then
    程序
fi

实例

编写 Shell 程序:如果输入的参数大于60,输出“及格”,否则输出“不及格”。

#!/bin/bash
if [ $1 -ge 60 ]
then
    echo 及格
elif [ $1 -lt 60 ]
then
    echo "不及格" 
fi 

case 分支

基本语法

case $变量名 in
"值1")
如果变量值等于值1,则执行此处程序1
;;
"值2")
如果变量值等于值2,则执行此处程序2
;;
...省略其它分支...
*)
如果变量值不等于以上列出的值,则执行此处程序
;;
esac

实例

当命令行参数为1时输出“周一”,2时输出“周二”,其他情况输出“其它”。

case $1 in
"1")
echo 周一
;;
"2")
echo 周二
;;
*)
echo 其它
;;
esac

for 循环

基本语法

# 语法1
for 变量名 in 值1 值2 值3...
do
    程序
done

# 语法2
for ((初始值;循环控制条件;变量变化))
do
    程序
done

实例

  1. 打印命令行输入的参数。

     #!/bin/bash
    
     # 使用$*
     for i in "$*"
     do
         echo "the arg is $i"
     done
     echo "=================="
    
     # 使用$@
     for j in "$@"
     do
         echo "the arg is $j"
     done
    

    运行结果(回顾一下 $*$@ 的区别):

     the arg is 1 2 3
     ==================
     the arg is 1
     the arg is 2
     the arg is 3
    
  2. 输出从1加到100的值。

     #!/bin/bash
     SUM=0
    
     for ((i=1;i<=100;i++))
     do
         SUM=$[$SUM+$i]
     done
     echo $SUM
    

while 循环

基本语法

while [ 条件判断式 ]
do
    程序
done 

实例

输出从1加到100的值。

#!/bin/bash
SUM=0
i=0

while [ $i -le $1 ]
do
    SUM=$[$SUM+$i]
    i=$[$i+1]
done       
echo $SUM

读取控制台输入

基本语法

read(选项)(参数)
选项

参数

实例

读取控制台输入一个num值。

#!/bin/bash

read -p "请输入一个数num1=" NUM1
echo "你输入num1的值是:$NUM1"

read -t 10 -p "请在10秒内输入一个数num2=" NUM2
echo "你输入num2的值是:$NUM2"

运行结果:

请输入一个数num1=10
你输入num1的值是:10
请在10秒内输入一个数num2=20
你输入num2的值是:20

函数

和其它编程语言一样,Shell 编程有系统函数和自定义函数,本文只举两个常用系统函数。

系统函数

自定义函数

基本语法

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

# 调用
funname 参数1 参数2...

实例

计算输入两个参数的和。

#!/bin/bash

function getSum(){
    SUM=$[$n1+$n2]
    echo "sum=$SUM"
}   

read -p "请输入第一个参数n1:" n1
read -p "请输入第二个参数n2:" n2

# 调用 getSum 函数
getSum $n1 $n2
上一篇下一篇

猜你喜欢

热点阅读