linux课堂笔记(4)shell脚本简单运用

shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本。事实上,shell脚本就是一些命令的集合。
shell脚本在linux下还是非常重要的。
shell脚本能帮我们很方便地管理服务器,我们可以指定一个任务计划,定时去执行某个shell脚本以满足需求。在正式编写shell脚本之前,建议将所有自定义的脚本放到 /usr/local/sbin/ 目录下,一是可以更好地管理文档,二是方便后面的维护。

系统支持的shell

cat /etc/shells

系统中的SHELL变量
$PATH #默认搜索目录
$SHELL #当前使用的shell版本
$HOME #用户的家目录
$PPID #父进程的ID
$LOGNAME #当前登录的用户名
$UID #当前用户的ID

在这里插入图片描述
shell脚本通常都以.sh作为后缀名,不是说不加.sh的脚本不能运行,只是大家的习惯,这样也方便辨识。

上面,第一行要以#!/bin/bash开头,表示该文件使用的是bash语法,不设置该行也可以执行,但不符合规范。

#表示注释,后面跟一些该脚本的相关注释内容,以及作者、创建日期或版本等。注释可以省略,但不建议省略,因为我们的记忆力有限,没有注释我们自己都不知道自己写的脚本是用来干什么的、是什么时候写的。建议从一开始就要养成写脚本的良好习惯,方便自己也方便他人。

案例

vi var1.sh
在这里插入图片描述
chmod u+x var1.sh

./var1.sh
在这里插入图片描述
注意:文件中的#!/bin/bash,
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell
./代表直接在当前目录搜索var1.sh文件,默认是从系统的环境变量$PATH中去搜索

变量和引用
变量是脚本语言的核心,shell脚本又是无类型的。变量本质上存储数据的一个或多个计算机内存地址,分为本地变量(用户当前shell生命期使用,随shell进程的消亡而无效,类似局部变量)、环境变量(适用于所有由登录进程所产生的子进程)和位置参数(向shell脚本传递参数,只读)。而shell使用变量就需要引用,它们密切相关。

变量赋值

(1)变量赋值规则:等号两边不能有空格、value值包括空格必须用双引号、变量名只能包括字母数字和下画杠,并变量名不能以数字开头。
(2)如果value值中有空格,需要用双引号引以来。variable=“hello world”。
(3)unset命令清除变量的值。
(4)变量赋值模式
(5)readonly将变量设置为只读,只读变量不能再次进行赋值操作。
在这里插入图片描述
2、无类型的变量
(1)C中定义变量需要声明整型、浮点型、字符型等,而shell脚本变量却是无类型的。shell不支持浮点型只支持整型和字符型,同时字符型还具有一个整型值0(判断标准:变量中只包含数字是数值型其他是字符串)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)位置参数
从命令行向shell脚本传递参数,$0表示脚本的名字, 1 代 表 第 一 个 参 数 , 以 此 类 推 。 从 1代表第一个参数,以此类推。从 1{10}开始参数号需要用花括号括起来。
在这里插入图片描述
在这里插入图片描述
特殊的位置参数:
特殊位置参数 意义
$# 传递到脚本的参数数量
∗ 和 *和 @ 传递到脚本的所有参数
$$ 脚本运行的进程号
$? 命令的退出状态,0表示没有错误,非1表示有错误

常用的截取

从左向右截取最后一个string后的字符串
${varible##*string}

从左向右截取第一个string后的字符串
${varible#*string}

从右向左截取最后一个string后的字符串
${varible%%string*}

从右向左截取第一个string后的字符串
${varible%string*}
“*”只是一个通配符可以不要

注意:

  1. 这里要查找的是第一个符合条件的字符所在的位置.

  2. 这里的索引并不是从0开始,而是从1开始算起,如果返回0,则表示查找失败.

  3. 这里查字符o,返回的是5,查找字符’oo’,索引仍然是5,只以第一个字符为主.
    #是从左到右 %号是从右到左

declare

declare命令有如下选项:

-a 声明一个数组

-i 声明一个整型

-f 打印所有函数定义

-F 仅打印函数名字

-r 声明一个readonly变量,该变量的值无法改变,并且不能为unset

-x 和export的作用类似

也可以用declare把变量定义为整型。例如:
declare -i age=22
age=age+1
echo $age
在这里插入图片描述
数字运算
在脚本中进行数字运算,也会用到变量。

下面再自定义一个脚本:

# vim sum.sh				#写入下面内容
#! /bin/bash 
## For get the sum of two numbers.
## Writen by lzx 2018-7-27

a=1
b=2
sum=$[$a+$b]
echo "$a+$b=$sum"

数学计算要用[]括起来,并且前面要加上符号$。

# sh sum.sh
1+2=3             

和用户交互
自定义一个脚本:

#!/bin/bash
## Using 'read' in shell script.
## Writen by lzx 2018-7-27

read -p "Please input a number:" x
read -p "Please input another number:" y
sum=$[$x+$y]
echo "The sum of two numbers is:$sum"

read命令用于和用户交互,它把用户输入的字符串作为变量值

# sh read.sh 
Please input a number:5
Please input another number:11
The sum of two numbers is:16

加上 -x选项查看执行过程:

# sh -x read.sh 
+ read -p 'Please input a number:' x
Please input a number:5
+ read -p 'Please input another number:' y
Please input another number:11
+ sum=16
+ echo 'The sum of two numbers is:16'
The sum of two numbers is:16

shell脚本预设变量
我们之前有使用过类似/etc/init.d/iptables restart这样的命令,前面的/etc/init.d/iptables文件其实就是一个shell脚本。那为什么后面可以跟一个restart字符串呢?这就涉及到了shell脚本的预设变量。

实际上,shell脚本在执行时,后面可以跟一个或者多个参数。

下面自定义一个脚本:

#!/bin/bash
## 测试预设变量
## Writen by lzx 2018-7-27

sum=$[$1+$2]
echo "sum=$sum"
# sh option.sh				#后面不加参数时,脚本会出错
option.sh:行5: +: 语法错误: 期待操作数 (错误符号是 "+")        

# sh option.sh  5 11				#后面加5和11,5和11就是预设变量$1和$2
sum=16

$1表示脚本的第一个参数,$2表示脚本的第二个参数,以此类推。

一个脚本的预设变量数量是没有限制的,另外还有$0,它表示脚本本身的名字。

#!/bin/bash
echo "$1 $2 $0"

# sh option1.sh 1 2 
1 2 option1.sh				#可以看到,显示出$0为option1.sh,即脚本名字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值