shell脚本基础知识(shell作用,shell变量、shell参数、shell编程规范)

本文详细介绍了Shell脚本的基础知识,包括Shell脚本的作用、编程规范、变量类型、变量运算及脚本编写方法。适合初学者快速入门。

shell脚本零基础知识

一、shell脚本的概述

shell不是开发语言,是为了减轻工作量,将要执行的命令按照顺序保存到一个文件中,赋予该文件执行权限,也可以结合各种shell控制语句完成复杂的操作,我们称这个可执行的文件为shell脚本。大多时候应用在重复性操作,交互性任务,批量事务的处理,服务运行状态的监控,定时任务的执行等等。

【1】shell的作用

shell的作用是命令解释器,俗话而言是内核(只识别二进制)与用户(命令)之间的“翻译官”(把用户的命令翻译成二进制),只是负责解释命令行。
在这里插入图片描述
过程简述:计算机用户tom执行某个应用程序或者命令,内部命令直接从系统内核调用–内部命令,有需要安装软件包,启用应用程序的命令—外部命令就通过shell和应用程序(软件包)之间交互,最后把翻译好的二进制交给内核处理,而内核的运行是基于系统硬件的支持,最后有显示器(硬件)给用户显示。

【2】shell的编程规范
(1)命名

1)命名只能使用字母,数字和下划线,首个字符不能以数字开头,开头字母一般大写,如Num
2)中间不能有空格,不能使用标点符号,不能使用汉字,可以使用下划线,所以我们往往使用 _ 作为分词的标识,例如:user_name、city_id 等等
3)不能使用bash里的关键字(可用help命令查看保留关键字)。
4)登录后默认使用的shell程序一般为/bin/bash,不同的shell的内部指令、运行环境等会有所区别。

(2)查看变量的值
1)执行一个变量:echo $Num(输出)
2)执行多个变量连续显示echo $Test$Num(组合输出)
[root@localhost~]#Test=test
[root@localhost~]#Num=12
[root@localhost~]#echo $Num
12
[root@localhost~]#echo $Test$Num
test12
(3)执行脚本文件方法
1)[root@localhost~]#./first.sh(需要执行权限chmod +x first.sh)
2)[root@localhost~]#sh first.sh(执行脚本不会改变环境,如目录切换)
lrwxrwxrwx.   1 root root     4 6月  28 06:30 sh -> bash(sh命令是bash的软连接)
3)[root@localhost~]#source first.sh或 . first.sh(会改变环境,属于内部命令)
(4)更完善的脚本构成

1)脚本声明
使用的什么shell程序执行的

#!/bin/bash

2)注释信息
时间,作用,名称等等,让别人了解明白你下面的执行命令。

#date:2012-05-06(时间)
#name:first(脚本名)
#This is my first shell-script(作用概述)

3)可执行的语句
主要的功能实现命令

cd /opt
echo "当前目录位于:"
pwd
mkdir test01
cd test01
touch first.txt
echo "新创建的文件信息:"
ls -lR first.txt
【3】交互式硬件设备,重定向符、管道符

交互式硬件设备
在这里插入图片描述
重定向符
在这里插入图片描述

二、shell脚本的变量

【1】变量的作用

用来存放(存在内存中,重启消失)系统(变量名)和用户(变量值)需要使用的特定参数或参数值。
变量名:使用固定的名称,由系统预设或用户定义,一般前面会指定变量类型。
变量值:能够根据用户设置,系统环境的变化而变化,你想赋予变量名的数字或字符串等。

【2】变量的类型
(1)数值型

1)整型:int类型,4个字节,赋值为整数型。如,int Num=10
2)浮点型:
在这里插入图片描述
如,f1=12.23F,d1=45.4545D

(2)非数值型

1)字符:char,1个字节(英文字母)或2个字节(汉字),文本编辑器一般会有字符集,支持中文字符集UTF-8,如,char gender=‘男’
2)字符串:string,字符串的处理规则:正则表达式,如,str1=“hello world”(有11个字符,空格算一个字符)。
3)布尔:布尔值是一个逻辑值. 只有 true(真) 和 false (假)。
4)枚举:颜色选定等

【3】变量名的类型

变量名的命名前面有提到,一般以字母或"_"开头,第一个字母大写Product=10
(1)自定义变量:由用户自己定义、修改和使用
(2)特殊变量:环境变量,只读变量,位置变量,预定义变量
1)环境变量:由系统提前创建,用来设置用户的工作环境,配置文件:/etc/profile(全局环境,系统特有)、~/.bash_profile(用户家目录,用户特有)
常见的环境变量:PWD、PATH、USER、SHELL、HOME

[root@localhost opt]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin(每个环境用:分割)
[root@localhost opt]# PATH="$PATH:/root"(添加其他环境PATH变量)
[root@localhost opt]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root
[root@localhost opt]# echo $PWD(查看绝对路径变量)
/opt

2)只读变量:用于变量值不允许被修改的情况

[root@localhost opt]# name=tom
[root@localhost opt]# readonly name(设置只读变量)
[root@localhost opt]# echo $name
tom
[root@localhost opt]# name=jack
-bash: name: 只读变量
[root@localhost opt]# 

3)位置变量:表示为$n,n表示1—9的数字

[root@localhost opt]# vim second.sh 
#!/bin/bash
#date=2020/07/16
#name=second 
sum=$(expr $1 + $2) 
echo "和是:$sum" 
sum1=`expr $3 + $4` 
echo "和是:$sum1"
[root@localhost opt]# sh second.sh 12 12 45 56
和是:24
和是:101

4)预定义变量:

1.$? 最后执行的命令的返回状态,输出值为0则上一条命令正确执行,如果不为0则执行错误
echo $?
2.$$ 当前进程的进程号(PID)
echo $$ 输出值为当前进程pid
3.$! 后台运行的最后一个进程的进程号(PID)
echo $! 输出值为最后一进程pid

[root@localhost opt]# echo $$
20122
[root@localhost opt]# echo $?
0
【4】变量运算

1.算式运算符:

 +、-、\*(使用转义符号)、/、%取余(取模)

2.运算方式:

生成随机数函数(1-6)
格式:num=($(($RANDOM % 6 + 1)))####把随机生成的数值赋予变量num
取1~6之间随机数
[root@localhost opt]# echo $(($RANDOM % 6 + 1))
6
[root@localhost opt]# echo $(($RANDOM % 6 + 1))
2
[root@localhost opt]# echo $(($RANDOM % 6 + 1))
4
[root@localhost opt]# echo $(($RANDOM % 6 + 1))
3
[root@localhost opt]# echo $(($RANDOM % 6 + 1))
1
[root@localhost opt]# echo $(($RANDOM % 6 + 1))
1
[root@localhost opt]# echo $(($RANDOM % 6 + 1))
4

3.浮点运算:bash本身不能做小数计算:需要bc命令转换 ,scale:精度

[root@localhost opt]# echo "2*4" | bc
8
[root@localhost opt]# echo "2^4" | bc
16
[root@localhost opt]# echo "scale=2;6/4" | bc
1.50
[root@localhost opt]# echo "scale=3;6/4" | bc
1.500

5.变量引用

(1)引号
当一个字符被引用时,其特殊含义被禁止 把有意义的变的没意义,把没意义的变的有意义
完全引用:'' 强引
部分引用:"" 弱引
(2)$参数在工作中用的最多的有如下几项:
$0:Shell 的命令本身
$1 到 $9:表示 Shell 的第几个参数
$? :显示最后命令的执行情况
$#:传递到脚本的参数个数
$$:脚本运行的当前进程 ID 号
$*:以一个单字符串显示所有向脚本传递的参数
$!:后台运行的最后一个进程的 ID 号
$-:显示 Shell 使用的当前选项

三、shell脚本的编写

【1】输入输出和执行
[root@localhost opt]# echo "hello world"(输出字符串)
hello world
[root@localhost opt]#vim first.sh(在文件中输入)
#!/bin/bash
#date=2020/07/15
#name=first 
echo "可使用的用户有:$(cat </etc/passwd |grep "bash$" |wc -l)个"
[root@localhost opt]# sh first.sh(执行,方法)
可使用的用户有:2个
【2】声明变量和删除变量
[root@localhost opt]# sum=12(声明)
[root@localhost opt]# echo $sum(查看,注意$符号)
12
[root@localhost opt]# unset sum(删除)
[root@localhost opt]# echo $sum

[root@localhost opt]#
【3】shell参数
(1)读取用户标准输入read

read:功能就是读取键盘输入的值,并赋给变量
read -p 读取用户标准输入
read -s -p 密文形式,不显示输入的信息
read -t 3 -p 三秒没输入为默认

[root@localhost opt]#vim first.sh
#!/bin/bash
#date=2020/07/15
#name=first 
read -p "请输入第一个数字:"  num1
read -p "请输入第一个数字:"  num2
sum=`expr $num1 + $num2`
echo "和是:$sum "
[root@localhost opt]# sh first.sh
请输入第一个数字:12
请输入第一个数字:12
和是:24 
(2)全局声明export

就算改变bash环境,定义的变量还在,用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。
在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

语法:export [-fnp][变量名称]=[变量设置值]
参数:
 -f  代表[变量名称]中为函数名称。 
 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 
 -p  列出所有的shell赋予程序的环境变量。

[root@localhost opt]#name=tom (没有赋值全局的变量name)
[root@localhost opt]# echo $name
tom
[root@localhost opt]# bash(改变环境)
[root@localhost opt]# echo $name(查询结果为空)

[root@localhost opt]# 
[root@localhost opt]# export name1=jack(全局赋值变量name1)
[root@localhost opt]# echo $name1
jack
[root@localhost opt]# bash(改变变量)
[root@localhost opt]# echo $name1(查询结果相同)
jack
[root@localhost opt]# 

候补添加,综合基础。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值