Shell编程规范及变量

文章介绍了Shell脚本的作用,如作为命令解释器,以及在Linux中的不同种类。详细阐述了Shell脚本的编程规范,包括脚本声明、注释和可执行语句。还讨论了执行方法,如通过指定路径、使用Shell解释或使用source。此外,提到了错误处理、重定向和管道符的使用。最后,文章涉及了Shell脚本中的变量类型、定义、查看、赋值及作用范围,包括环境变量、位置变量和预定义变量。
摘要由CSDN通过智能技术生成

一、Shell脚本概述 

1.1 Shell的作用——翻译官

shell是一个特殊的应用程序,它介于操作系统内核和用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

1.1.2 Linux中Shell的种类

[root@localhost ~]# cat /etc/shells  ##查看系统中自带的shell 

/bin/bash            ##linux中默认的shell,除非指定
/sbin/nologin        ##禁止用户登录
/bin/tcsh            ##整合了csh的功能,提供比csh更强大的功能
/bin/csh             ##类似c语言的shell


[root@localhost ~]# cat /etc/passwd  ##查看系统中用户的登录shell

1.2 Shell脚本编程规范

1.2.1  Shell脚本的作用

  • 自动化运维
  • 批量化重复操作可以编写脚本结合计划任务自动周期运行
  • 减轻管理员工作量
  • 提高处理文本文件的速度
  • 避免配置出错

1.2.2 Shell脚本的构成

  1. 脚本申明(解释器):若第一行为“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行,
    #!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
  2. 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。
  3. 可执行语句:比如echo命令,用于输出" "之间的字符串
     

例:

vim /root/first.sh    #使用vim编辑器编辑

#!/bin/bash   #脚本解释器声明
# This is my first Shell-Script.   #注释
cd /boot    #linux命令
echo "当前的目录位于:"    #linux输出命令
pwd
echo "其中以 vml 开头的文件包括:"
ls -lh vml*

 1.2.3 Shell脚本的执行方法

方法一:指定路径的命令,要求文件必须有x权限,也可使用chmod 777 first.sh
[root@localhost ~]# chmod +x first.sh 
[root@localhost ~]# ./first.sh 
当前的目录位于:
/boot

#指定绝对路径:/root/first.sh  
#指定相对路径:./first.sh
#工作中使用

方法二:指定Shell来解释脚本,不要求文件必须有 x 权限。
[root@localhost ~]# sh first.sh 
当前的目录位于:
/boot
#调试阶段适用

方法三:source 脚本路径执行shell脚本
[root@localhost ~]# source first.sh
当前的目录位于:
/boot
#调试阶段适用

1.2.4 脚本错误

  1. 命令错误:命令出错不会影响接下来的命令继续2.语法错误
  2. 语法错误:会影响接下来的命令继续
  3. 逻辑错误:只能自己去筛查

查找方法

bash -n 脚本名称 (不在当前目录下加绝对路径)   检查语法错误
bash -x 脚本名称 (不在当前目录下加绝对路径)   检查逻辑错误

1.3 重定向与管道符

1.3.1 重定向操作

类型操作符作用
重定向输出>将指定结果保存到文件中,并覆盖原有内容
>>将标准输出追加到指定的文件的尾部,不覆盖原有内容
重定向输入<从指定的文件读取数据
重定向错误输出2>将错误的信息保存到指定文件,也会覆盖原有内容
2>>将错误的信息保存到指定文件,不会覆盖原有内容
混合输出&>将标准和错误都保存在文件中,会覆盖原有内容

1.3.2 管道符

  • 管道符:“ | ”,将管道符左侧的命令输出的结果,作为右侧命令的输入参数,同一个命令可以使用多个管道符
[root@localhost opt]# ps aux |wc -l  #查看进程数
201

二、Shell脚本变量

2.1 Shell变量的作用

(1)用来存放系统和用户需要使用的特定参数(值)

(2)变量名:使用固定的名称,由系统预设或用户定义

  • 不能使用系统的命令作为变量名
  • 不能使用中文
  • 不能使用特殊符号开头,但是可用“ _ ”来开头
  • 最好只用这个变量的英文名指定变量名
  • 要有注释,目的:解释代码用途

(3)变量值:能够根据用户设置、系统环境的变化而变化

  • int:整数
  • string:字符串
  • true:布尔(真假)
  • false:浮点(小数)

2.2 自定义变量

自定义变量:由用户自己定义、修改和使用

2.2.1 定义新的变量

格式:变量名=变量值
#例:
[root@localhost ~]#abc=123  #定义变量


格式:unset 变量名
[root@localhost ~]#unset abc  #删除变量
[root@localhost opt]# echo $abc

2.2.2 查看变量的值

格式:echo $变量名
#例:
[root@localhost ~]#echo $abc  #查看单个变量值
123
[root@localhost ~]# echo ${abc}${def}  #查看多个变量值,不加{}可能导致不显示正确的变量值
123456

2.2.3 只读变量

格式:readonly 变量名
#例:
[root@localhost opt]# aa=123
[root@localhost opt]# readonly aa  #设置为只读变量
[root@localhost opt]# echo $aa
123
[root@localhost opt]# aa=456
-bash: aa: 只读变量                #只读变量不可以被重新赋值
[root@localhost opt]# unset aa
-bash: unset: aa: 无法反设定: 只读 variable    #只读变量不可以被删除,unset 命令用于删除变量

2.2.4 赋值时使用引号

反撇号:命令替换,将命令执行的结果,赋值给变量名

单引号:强引用,用单引号打印变量,只会输出变量名,不会输出变量的值

双引号:弱引用,打印变量的赋值

#示例
[root@localhost opt]# aa=`ll -h`
[root@localhost opt]# echo "$aa"
总用量 4.0K
-rw-r--r-- 1 root root 29 7月   8 15:32 1.txt

弱引用和强引用
"$name " :弱引用,其中的变量引用会被替换为变量值
'$name ' :强引用,其中的变量引用不会被替换为变量值,而保持原字符串

2.2.5 read命令获取变量

-p:指定提示符,提示用户输入数据

格式:read -p "提示信息" 变量名
示例:
[root@localhost opt]# vim kedu.sh

read -p "请输入:" a
read -p "请输入:" b
c=$(($a+$b))
echo $c
                                                                 
[root@localhost opt]# sh read.sh 
请输入:123
请输入:321
444
            

2.2.6 变量作用范围

  • 默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时局部变量将无法再使用。

  • 可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。

[root@localhost opt]# export  #查看设置的所有全局变量

[root@localhost opt]# export 变量名=变量值  #只能在当前环境生效,重启失效

[root@localhost opt]# source /etc/profile  #设置全局变量
[root@localhost opt]# source /root/.bashrc_profile  #只对root用户生效

注:全局变量的使用可能导致副作用和潜在的复杂性。因为全局变量是可访问的,所以它们可以被任何函数修改,这可能导致程序状态的不确定性和难以调试的问题。所以在工作中不常用。

2.3 环境变量

环境变量:系统提前创建或人工添加,用来设置用户工作环境

  • 使用 env 命令可以查看到当前工作环境下的环境变量
  • 变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录,变量PATH表示可执行程序的默认搜索路径
  • 配置文件:/etc/profile(全局生效)、~/.bash_profile(当前用户环境)

2.4 位置变量

  • 当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

  • $n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}

示例:

[root@localhost opt]# cat zy.sh 
#!/binbash
num1=$1
num2=$2
num3=$3
num4=$4
num5=$5
num6=$6
num7=$7
num8=$8
num9=$9
num10=${10}
num11=${11}
sum=$(($1+$2+$3+$4+$5+$6+$7+$8+$9+${10}+${11}))
echo $sum
[root@localhost opt]# sh zy.sh 1 2 3 4 5 6 7 8 9 10 11
66

2.5 预定义变量

  • 编程语言或者脚本解释器提供的,可以自动设置和更新,但是由变成语言和脚本解释器自动完成,人工不能修改
  • $*、$@:表示命令和脚本需要处理的参数
  • $*:加引号时,会把参数当成一个整体处理,不加引号时,会把参数分别处理
  • $@:加不加引号,都会把参数分开处理
  • $#:统计传递给脚本参数的个数
  • $?:表示前一条命令或者脚本执行后的返回码,返回码时0,表示只从正确,所有非0的返回码,时表示执行错误。也常被用于Shell脚本中return退出函数并返回的退出值。

2.6  整数变量的运算

运算符:+ 加法、- 减法、* 乘法、/除法、% 取余

常见格式:
格式一:
i=((15+6)) 或 i=(($a+$b))
格式二:
i=$(expr 15 \* 6)  #乘法需要加“\”,其它运算都一样
格式三:
i=$[15*6]
格式四:
let i=15*6

重点:

  • i=$((15*6))
  • i=$(expr 15 \* 6)
  • let i=$a*$b  使用变量时必须要加$

特殊形式:

  1. i++:相当于i=$(($i+1)),先赋值再加,每次自加1
  2. i--:相当于i=$(($i-1)),先赋值再减,每次自减1
  3. i+=2:相当于i=(($i+2)),先赋值再加,每次自加2
  4. ++i:先加再赋值,每次加1
  5. --i:先减再赋值,每次减1

bc:是一个简单易用的计算器程序,可以用于执行基本的数学运算,
包括加、减、乘、除和取余等操作。

示例:
[root@localhost opt]# echo 16/2 | bc
8


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值