学习Shell脚本

背景

狗头之所以开始接触并学习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

原文地址:https://www.cnblogs.com/mrdoghead/p/12003980.html

时间: 2024-11-07 14:21:50

学习Shell脚本的相关文章

学习 shell脚本之前的基础知识

转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富.笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要

学习shell脚本之前要掌握的知识

学习SHELL脚本之前的知识 1)记录命令历史 我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令.这些命令保存在用户的家目录中的.bash_history文件中.有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中. 与命令历史有关的有一个有意思的字符那就是"!"了.常用的有这么几个应用:(1)!! (连续两个"!"),表示执行上一条指令:(2)!n(这里的n是数字),

学习shell脚本笔记

1.if 是单分支语句,使用格式如下: if condition ; then statement -.. fi 2.if - else 是双分支语句,使用格式如下: if condition ; then statement -. else statement -. fi 3.if -elif-elif-else 是多分支语句,使用格式如下: if condition ; then statement -. elif condition ; then statement -.. elif co

linux运维学习shell脚本监控nginx服务

菜鸟学习shell脚本后,动手练手简单小实验,使用shell脚本判断nginx是否正常运行,如果没有运行将nginx服务启动起来. 一.基于进程判断 1.获取nginx进程来判断该服务是否正常启动. ps -ef | grep nginx | grep -v grep | wc -l    输出进程行数 然后判断是否为2 如果不是说明该服务没有启动. grep -v grep  用来排除掉您所使用grep产生的进程. 2.shell 脚本编写 先定义一个变量Web #!/bin/bash Web

学习Shell脚本编程(第4期)_在Shell程序中的使用变量

变量的赋值 变量的访问 变量的输入 4.1 变量的赋值     在Shell编程中,所有的变量名都由字符串组成,并且不需要对变量进行声明.要赋值给一个变量,其格式如下: 变量名=值  注意: 等号(=)前后没有空格 例如: x=6 a="How are you " 表示把6赋值给变量x,字符串"How are you "赋值给变量a. 4.2 访问变量值 如果要访问变量值,可以在变量前面加一个美元符号"$",例如: [[email protect

学习Shell脚本编程(目录)

所涉及的内容如下: Shell命令行的运行 编写.修改权限和执行Shell程序的步骤 在Shell程序中使用参数和变量 表达式比较.循环结构语句和条件结构语句 在Shell程序中使用函数和调用其他Shell程序 目录如下: ...... 学习Shell脚本编程(目录)

学习Shell脚本编程(第2期)_编写修改权限及执行Shell程序的步骤

编写Shell程序 执行Shell程序 Shell程序有很多类似C语言和其他程序设计语言的特征,但是又没有程序语言那样复杂.Shell程序是指放在一个文件中的一系列Linux命令和实用程序.在执行的时候,通过Linux操作系统一个接一个地解释和执行每条命令.首先,来编写第一个Shell程序,从中学习Shell程序的编写.修改权限.执行过程. 2.1 编辑Shell程序 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下. [[email protected] bin]#v

学习Shell脚本编程(第1期)_Shell命令行书写规则

Shell命令行的书写规则 对Shell命令行基本功能的理解有助于编写更好的Shell程序,在执行Shell命令时多个命令可以在一个命令行上运行,但此时要使用分号(:)分隔命令,例如: [[email protected] root]# ls a* -l;free;df 长Shell命令行可以使用反斜线字符(\)在命令行上扩充,例如: [[email protected] root]# echo "this is \ >long command" This is long com

学习Shell脚本编程(第3期)_在Shell程序中使用的参数

位置参数 内部参数 如同ls命令可以接受目录等作为它的参数一样,在Shell编程时同样可以使用参数.Shell程序中的参数分为位置参数和内部参数等. 3.1 位置参数 由系统提供的参数称为位置参数.位置参数的值可以用$N得到,N是一个数字,如果为1,即$1.类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始.第0号为程序名字,从1开始就表示传递给程序的参数.如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推. 3.2 内部参数 上述过程中的$0是一个

linux学习—shell脚本知识点总结

Shell脚本 --Shell脚本有点像早期的批处理文件,将一些命令汇总起来一次执行,但Shell有更强大的功能,可以类似于程序的编写,不需要编译就能执行,使用起来很方便,可以简化我们日常的管理工作. 目录 什么是Shell 脚本的运行方法 #!(读shabang)的作用详解 结合案例分析变量类型 特殊变量及其[email protected] $*的区别 退出状态 算数运算 test和[ expression ]判断 一.什么是Shell 我们知道管理整个计算机硬件的其实是核心(kernel)