shell脚本编程规范与变量

目录

一、shell介绍

1、 创建一个简单的脚本

2.重定向操作 

二、shell变量、类型

1.变量名的规范

2.变量类型

3.强引用与弱引用

命令 read

4.全局变量

bc   linux计算器,支持整数,也支持浮点

5.环境变量  env

6.位置变量

7.预定义变量

 $0

$? 

三、$* 与$@的区别


一、shell介绍

shell脚本(Shell  Script)就是将要执行的命令按顺序保存到一个文本文件,并给该文件可执行权限,方便一次性执行的一个程序文件。主要是方便管理员进行设置或管理,可结合各种Shell控制语句完成更复杂的操作。常用于重复性操作、批量事务处理、自动化运维、服务运行状态监控、定时任务执行等。

/bin/bash是目前大多数Linux版本采用的默认Shell脚本。

新建脚本以.sh结尾

  • shell脚本应用场景:
    • 重复性操作
    • 交互性任务
    • 批量事务处理
    • 服务运行状态监控
    • 定时执行任务

1、 创建一个简单的脚本

切换目录

 

 脚本的运行方式

  • sh [文件名]      运行       用于运行期间,调试阶段
  • bash [文件名]   运行       用于运行期间,调试阶段
  • source [文件名]   执行     用于运行期间,调试阶段
  • ./[文件名]    需要执行权限  ,需要通过chmod  777,赋权执行,一旦正式上线,要给执行权限运行。

              脚本文件在命名的时候要以“.sh”结尾。

 交互式硬件设备

  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行无=出错误信息

2.重定向操作 

类型操作符用途
重定向输入<

从指定的文件读取数据

重定向输出

>

>>

将输出结果保存到指定文件(覆盖原内容)

将数据结果追加到指定文件(不覆盖原内容)

重定向错误输出

2>

2>>

将错误信息保存到指定的文件(覆盖原有内容)

将错误信息追加到指定的文件中 (不覆盖原有的内容)

混合输出&>将标准输出,标准错误内容保存到同一个文件中

黑洞文件  /dev/null

cat  /dev/null  >[文件名]    不删除文件,清空文件

二、shell变量、类型

变量名:使用固定的名称,由系统内设,或者是用户自己进行自定义

变量值:能够根据用户设置,系统环境的变化而变化

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

特殊变量:环境变量,只读变量,位置变量,预定义变量

打印变量的值,前面要加 "$"   例如:echo $[变量名]

引用变量时,在变量前面也要加 “$” ,例如:$[变量名]

1.变量名的规范

  •  不能使用系统的命令作为变量名
  • 不能使用中午
  • 不能以特殊符号开通 ,例如:#、$、%、()、+、*、等
  • 可以使用"_"下划线开头
  • 有必要时,需要注释

2.变量类型

整数 :int

字符串:string

布尔类型:0 1   是与否

浮点:小数 

只读变量:readoly

3.强引用与弱引用

在赋值变量时,单引号与双引号没有区别

打印变量时:

双引号:弱引用,还是原来的值,不变 ""

单引号:强引用,就不是原来变量的值,就变成单引里面的内容$[变量名],变成了字符串''

反撇号:提取命名执行的结果,然后再给变量赋值  ``

命令 read

reda  -p "提示信息"     [变量名]

4.全局变量

所有的用户自定义变量在所有的子shell环境都可以使用

优点:全局范围、持久性、共享性、持久性、

缺点:如果相同的变量名,直接引用全局变量,会导致不确定性,在脚本中一般使用自定义变量。

整数运算

expr  1 + 2   加法                                                                       

 expr  1 - 2   减法

expr  1 \* 2   乘法

expr  1 / 2   除法

expr  1 % 2    求余

C=$((1+2))  <<====>>  C=$[1*2]     <<====>>    let c=12*8

i++   先赋值,再加      i++    <===>   i+=1

i--      先赋值,再减      i--    <====>   i-=1

++i    先加,再赋值

--i       先减,在赋值

bc   linux计算器,支持整数,也支持浮点

整数

[root@test1 /]# echo   4*4 | bc
16
[root@test1 /]# echo   4-4 | bc
0
[root@test1 /]# echo   4+4 | bc
8
[root@test1 /]# echo   4%4 | bc
0

浮点

[root@test1 /]# echo   8.5*6.2 | bc
52.7
[root@test1 /]# echo   8.5-6.2 | bc
2.3
[root@test1 /]# echo   8.5+6.2 | bc
14.7
[root@test1 /]# echo   8.5/6.2 | bc
1

5.环境变量  env

env :查看当前工作下的全部环境变量

系统自带,用于设置工作环境,配置系统行为传递信息,控制

[root@test1 /]# env
XDG_SESSION_ID=374
HOSTNAME=test1
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.234.1 60673 22
SELINUX_USE_CURRENT_RANGE=
OLDPWD=/opt
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
SSH_CONNECTION=192.168.234.1 60673 192.168.234.123 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
DISPLAY=localhost:11.0
_=/usr/bin/env

 echo   $PATH   查看可执行用户程序的默认路径   

 echo   $USER   表示用户的宿主目录

 echo   $LANG   表示语言和字符集

 echo   $PWD     表示当前所在工作目录

6.位置变量

命令变量:命令参数,运行脚本或程序时,传递给他们的值,位置变量用于将外部数据传递给脚本执行。

[root@test1 opt]# cat  adder2num.sh
     1  #!/bin/bash
     2  sum=`expr $1 + $2`
     3  echo  "$1 + $2 =$sum"

[root@test1 opt]# sh  adder2num.sh  12  34
12 + 34 =46

7.预定义变量

预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量进行赋值。预定义变量使用“$”符号和另一个符号组合表示,较常用的几个预定义变量的含义如下:

  • $#:表示命令行中位置参数的个数
  • $*:表示所有位置参数的内容
  • $?表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。
  • $0:表示当前执行脚本或程序的名称

 $0

$? 

 

三、$* 与$@的区别

     有无“”                     $*                $@
      有        把内容处理在一行           把内容分行处理
       没有          将内容分行处理           将内容分行处理

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值