温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Shell脚本是什么

发布时间:2021-11-08 10:45:09 来源:亿速云 阅读:141 作者:小新 栏目:建站服务器

小编给大家分享一下Shell脚本是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

前言 
   Shell Script,Shell脚本与Windows及Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,毕竟它使用了Linux/Unix下的命令。shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。
   更明白地来说,shell script就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。

概念区别
   Shell和Shell脚本有什么区别?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。

一、Shell脚本的基本语法
1、编写个简单的shell脚本
[root@xj ~]# vim example.sh
#!/bin/bash
#This is to show waht a example looks like.
echo "our first example"
echo "we are currently in the following directroy"
pwd
echo "This directory contains the following files"
ls
[root@xj ~]# chmod +x example.sh   //给脚本赋予可执行权限
[root@xj ~]# ./example.sh          //执行运行
2、创建和执行shell脚本的基本步骤

二、Shell脚本的变量
1、什么是变量
   变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)
中,变量可能是不可变(immutable)的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。

2、Shell变量
Shell中变量是传递数据的一种方法。变量是用来代表每个值的符号名
Shell中有两类变量:临时变量和永久变量。
扩展:
自定义环境变量
[root@xj ~]# mv example01.sh /etc/sysconfig/
[root@xj ~]# export PATH=/etc/sysconfig:$PATH
[root@xj ~]# echo $PATH
/etc/sysconfig:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
注:这种方式一旦终端关闭后,就会失效,要想修改永久生效,可以修改用户目录下.bashrc文件,在此文件的最后一行添加export PATH=/etc/sysconfig:$PATH保存退出。
[root@localhost ~]# source .bashrc
执行.bashrc后不报错,则表示成功!

用户定义变量:由字母或下划线打头,由字母、数字或下划线组成,区分大小写并且大小写字母意义不同。变量名长度没有限制。
使用变量值时,应在变量名前加上“$”符号。
例如:
[root@xj ~]# 123=abc
bash: 123=abc: command not found…

变量赋值:变量=值,赋值号“=”两边不加空格,否则提示错误。
[root@xj ~]# a = 1
bash: a: command not found…
正确方式如下:
[root@xj ~]# name=rm
[root@xj ~]# NAME=mk
[root@xj ~]# echo $NAME
mk
[root@xj ~]# echo $name
rm

3、变量的运用
例:将一个命令的执行结果赋给变量
[root@xj ~]# A=`date`
[root@xj ~]# echo $A
Tue Mar 8 21:12:45 CST 2016
[root@xj ~]# B=$(date)
[root@xj ~]# echo $B
Tue Mar 8 21:13:33 CST 2016

变量值的可传递性
[root@xj ~]# A=`date`
[root@xj ~]# C=$A
[root@xj ~]# echo $C
Tue Mar 8 21:12:45 CST 2016

可以利用变量和其它字符组成一个新的字符串
[root@xj ~]# MYDIR=/home/rm/
[root@xj ~]# echo $MYDIR
/home/rm/
[root@xj ~]# echo $MYDIRzhangsan
输出内容为空
[root@xj ~]# echo ${MYDIR}zhangsan
/home/rm/zhangsan

给变量赋值多个单词:
[root@xj ~]# NAME="mk docker"
[root@xj ~]# echo $NAME
mk docker
[root@xj ~]# NAME="rm $NAME"
[root@xj ~]# echo $NAME
rm mk docker
[root@xj ~]# NAME='rm $NAME'
[root@xj ~]# echo $NAME
rm $NAME
单引号和双引号的区别:单引号将变量之间的内容原封不动地指定给变量。双引号取消了空格的作用,保留特殊符号的含义。

删除变量:
[root@xj ~]# echo $NAME
rm $NAME
[root@xj ~]# unset NAME
[root@xj ~]# echo $NAME

4、Shell脚本中的位置变量与特殊变量
位置变量:Shell解释执行用户的命令时,将命令行的第一个字作为命令名,而其它字作为参数。由出现在命令行上的位置确定的参数称为位置参数。 
位置变量:使用$N来表示
[root@xj ~]# vim b.sh
#!/bin/bash
echo "第一个目录是$1"
echo "第二个目录是$2"
[root@xj ~]# chmod +x b.sh
[root@xj ~]# ./b.sh /home/ /etc/
第一个目录是/home/
第二个目录是/etc/
$0 这个程序的文件名 example.sh
$n 这个程序的第n个参数值,n=1..N

特殊变量:
有些变量是一开始执行Script脚本时就会设定,且不能被修改,但我们不叫它只读的系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,以下是一些等殊变量:
$*  这个程序的所有参数
$#  这个程序的参数个数
$$  这个程序的PID
$!  执行上一个后台程序的PID
$?  执行上一个指令的返回值
[root@xj ~]# vim z.sh
#!/bin/bash
echo "$* 表示这个程序的所有参数"
echo "$# 表示这个程序参数的个数"
touch /root/a.txt
echo "$$ 表示这个程序的PID"
touch /root/b.txt &
echo "$! 表示上一个后台指令的PID"
echo "$$ 表示程序的进程PID"
[root@xj ~]# ./z.sh aaa bbb ccc
aaa bbb ccc 表示这个程序的所有参数
3 表示这个程序参数的个数
39839 表示这个程序的PID
39841 表示上一个后台指令的PID
39839 表示程序的进程PID

例:变量在shell中的使用
[root@xj ~]# vim z1.sh
#!/bin/bash
var1="abcd efg"
echo $var1
var2=1234
echo "The value of var2 is $var2"
echo $HOME
echo $PATH
echo $PWD
[root@xj ~]# chmod +x z1.sh
[root@xj ~]# ./z1.sh
abcd efg
The value of var2 is 1234
/root
/etc/sysconfig:/etc/sysconfig:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
/root

三、shell中的命令
1、Read命令的使用
作用:从键盘读入数据,赋给变量
[root@xj ~]# read a b c
1 22 33
[root@xj ~]# echo $a $b $c
1 22 33

read与参数-p -n -t结合使用
-p(提示语句) 
-n(字符个数)
-t(等待时间) 
[root@xj ~]# read -p "请输入你的准考证号: " ID
请输入你的准考证号: 20160308
[root@xj ~]# echo $ID
20160308
[root@xj ~]# vim read.sh
#!/bin/bash
read -p "请输入你的姓名:" NAME
read -p "请输入你的年龄:" AGE
read -p "请输入你的性别:" SEX
echo "你的基本信息如下:"
echo "姓名:$NAME"
echo "年龄:$AGE"
echo "性别:$SEX"
[root@xj ~]# chmod +x read.sh
[root@xj ~]# ./read.sh
请输入你的姓名:孙悟空
请输入你的年龄:500
请输入你的性别:男
你的基本信息如下:
姓名:孙悟空
年龄:500
性别:男

2、expr命令的使用
作用:Shell变量的算术运算:
§ expr命令:对整数型变量进行算术运算
语法:expr 表达式    //注意:运算符之间要有空格
[root@xj ~]# expr 3 + 2
5
[root@xj ~]# expr 8 – 3
5
[root@xj ~]# expr 8 / 4
2
[root@xj ~]# expr 8 \* 4
32
[root@xj ~]# expr 8 % 3
2
注:%取余运算

结合变量使用运算符
[root@xj ~]# var1=16
[root@xj ~]# var2=4
[root@xj ~]# expr $var1 – $var2
12

3、算数运算符在shell脚本中的使用
[root@xj ~]# vim expr.sh
#!/bin/bash
read -p "Please input the value of a " a
read -p "Please input the value of b " b
read -p "Please input the value of c " c
value1=`expr $a + $b + $c`
echo "The value of value1 is $value1"
value2=`expr $c / $b`
echo "The value of value2 is $value2"
value3=`expr $c \* $b`
echo "The value of value3 is $value3"
value4=`expr $a + $c / $b`
echo "The value of value4 is $value4"
[root@xj ~]# ./expr.sh
Please input the value of a 10
Please input the value of b 20
Please input the value of c 30
The value of value1 is 60
The value of value2 is 1
The value of value3 is 600
The value of value4 is 11

复杂运算
[root@xj ~]# expr $(expr $(expr 5 + 11) / $var3) + 4
12

以上是“Shell脚本是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI