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]#
候补添加,综合基础。
本文详细介绍了Shell脚本的基础知识,包括Shell脚本的作用、编程规范、变量类型、变量运算及脚本编写方法。适合初学者快速入门。

被折叠的 条评论
为什么被折叠?



