学习Shell脚本

可紊 提交于 2019-12-07 23:43:27

背景

狗头之所以开始接触并学习shell脚本呢,是因为最近工作中经常需要在跑模型前输入一些命令来设定一些配置或是参数,然后还要调用一些代码,那么在Linux中一条条输入起来就比较麻烦,而且可能会有输错、遗漏的情况,这个时候Shell脚本就可以帮忙解决这些问题。我们可以通过写一个Shell脚本来统一管理这些命令,然后执行这个Shell脚本达到一次性执行这些操作的目的。本文也是持续更新哦!

什么是Shell脚本?

其实你可能早就见过Shell脚本,Shell脚本通常是一个以.sh为后缀的文件,类似我们之前学过的java,python,写一个shell脚本只需要有一个能编写代码的文本编辑器(比如Vim)和一个能解释执行的脚本解释器就可以了,然后用sh就能执行。

通过实例来学习

linux下可以用vim直接新建一个sh脚本

vim test.sh

实例1

#! /bin/bash
# This is my first shell script
echo "Hello World!"
date

第一行的#!是固定格式,用来指定解释器。
第二行#开头,是注释
第三行相当于print
第四行相当于我们直接在linux中输入date来打印时间

然后,我们用sh来运行它

sh test.sh

实例2

我们试着来做几种不同的加法脚本

第一种:

#! /bin/bash
# input: x, y
# return x + y

echo "pls enter a num:"
read x
echo "pls enter another:"
read y

sum=`expr $x + $y`
# sum=$[$x+$y]
echo "The sum is $sum."

解读一下,1)这里的read会让用户输入一个值,然后传递给后面的参数; 2)sum=必须连在一起 3)凡是需要用到之前定义过的参数,必须加$ 4)运算符可以通过expr来实现,注意这里的`是反引号,并且注意里面的空格不能少(和其他编程语言不太一样)

第二种:

#! /bin/bash

sum=$[$1+$2]
echo "${sum}"

运行时

sh add2.sh 3 4
# 7

解读一下,1)这里的$1, $2表示运行时指定的第一二个参数,另外\(0表示脚本自己;2)\)sum 与 ${sum}一样,只不过{ }更准确

第三种:

#! /bin/bash

# use function

function sum(){
                sum=$[$1+$2]
                echo $sum
}

sum $1 $2

运行

sh add_fn.sh 3 4
# 7

这一种就是用到了function的形式,和其他编程语言类似。

实例3

介绍一下关系运算符,以及判断

#! /bin/bash

# compare two number
# use if elif else clause

read -p "x1 = " x1
read -p "x2 = " x2

if (($x1>$x2)); then
                echo "result: x1 > x2"
elif (($x1==$x2)); then
                echo "result: x1 = x2"
else
                echo "result: x1 < x2"
fi

解读一下,1)这里读取x1 x2的方法更简洁一些;2)注意if后面的括号和分号;3)注意最后的fi

实例4

介绍一下case的使用

#! /bin/bash

# check whether odd or even

read -p "pls enter a num:" num
remainder=$[$num%2]

case $remainder in
                0)
                                echo "$num is an even";;
                1)
                                echo "$num is an odd";;
esac

解读一下,1)case中每个类别后面加;2)注意要两个分号;;哦;3)最后的esac是case的倒写

实例5

介绍一下如何使用loop(for和while)

#! /bin/bash

echo "for loop"
for i in `seq 1 5`; do
                echo $i
done

echo "while loop"
a=5
while [ $a -ge 1]; do
                echo "$a"
                a=$[$a-1]
done

解读一下,1)seq 1 5是用来生成1-5的数,类似于range(1,6);2)-ge表示greater or equal 就是大于等于,类似的还有le小于等于,ne不等于,gt大于,lt小于;3)注意done

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!