SHELL脚本编程变量详解

                       作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.变量概述

1>.什么是变量

  变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。

  变量是命名的内存空间,变量可以通过变量名访问。
    在指令式语言中,变量通常是可变的,但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的
    在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);
    但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义"变量"的准确外延。   变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。   简单的说,变量就是用一个固定的字符串(也可能是字符数字等的组合),替代更多更复杂的内容,这个内容里可能还会包含变量的路径,字符串等其他的内容。使用变量最大的好处就是方便,当然,除了方便以外,很多时候在编程中使用变量也是必须的,否则就发无法完成开发工作。

2>.变量类型

作用:
  (1)数据存储方式
  (2)参与的运算
  (3)表示的数据范围
类型:
  字符
  数值:整型、浮点型

3>.shell中变量命名法则

  a>.变量名称可以由字母,数字和下划线组成,但是不能以数字开头;
  b>.在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型;
  c>.变量用等号连接值,等号左右两侧不能有空格;
  d>.变量的值如果有空格,需要使用单引号或双引号包括;
  e>.在变量的值中,可以使用“\"转义符;
  f>.如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“$变量名”或用"${变量名}"包含;
  g>.如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令;
  h>.环境变量名建议大写,便于区分;
  i>.不能使程序中的保留字:例如if, for
  j>.见名知义,统一命名规则:驼峰命名法

4>.Shell中命名强烈建议规则

()变量名大写
()局部变量小写
()函数名小写
()用英文名字,并体现出实际作用

二.编程语言分类

静态编译语言(Static):
  使用变量前,先声明变量类型,之后类型不能改变,在编译时检查。
  典型代表:C,C++,Java 动态编译语言(Dynamic):
  不用事先声明类型,随时可以赋值为其他类型。由于编程时不知道是什么类型,很难推断运行时的类型
  典型代表:bash,Python 强类型语言(Strong):
  不同类型数据操作,必须经过强制转换才同一类型才能运算。
  典型代表:java , c# ,python
  如:以下python代码
    print('yinzhengjie'+ ) 提示出错,不会自动转换类型
    print('yinzhengjie'+str()) 结果为magedu10,需要显示转换类型 弱类型语言(Weak):
  同类型间可以操作,自动隐式转换。即语言的运行时会隐式做数据类型转换,无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用   
  典型代表:bash(不支持浮点数),php,javascript
  如:以下JavaScript代码
      console.log(+'a') 常见的编程语言分类大致如下图所示(图片来自网络)。

三.bash中变量的种类

1>.根据变量的生效范围等标准划分下面变量类型

局部变量:
  生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效

环境变量:
  生效范围为当前shell进程及其子进程

本地变量:
  生效范围为当前shell进程中某代码片断,通常指函数

位置变量:
  $, $, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

特殊变量:
  $?, $, $*, $@, $#,$$

2>.局部变量

[root@node101.yinzhengjie.org.cn ~]# echo $name                   #当前变量没有被定义,因此打印的是空行。

[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# name="yinzhengjie"   #定义一个局部变量,变量赋值可以是直接字串
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $name
yinzhengjie
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# name="$USER"   #变量弱引用,其中的变量引用会被替换为变量值
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $name
root
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# name=`hostname`      #变量的命令引用
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $name
node101.yinzhengjie.org.cn
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# unset name  #删除变量
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $name [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# name='$USER'   #变量的强引用,其中的变量引用不会被替换为变量值,而保持原字符串
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $name
$USER
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# set                            #显示已定义的所有变量
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:p
romptvars:sourcepathBASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([]="" []="" []="" []="" []="release" []="x86_64-redhat-linux-gnu")
BASH_VERSION='4.2.46(2)-release'
COLUMNS=
DIRSTACK=()
EUID=
GROUPS=()
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=
HISTSIZE=
HOME=/root
HOSTNAME=node101.yinzhengjie.org.cn
HOSTTYPE=x86_64
IFS=$' \t\n'
JAVA_HOME=/home/softwares/jdk1..0_201
LANG=en_US.UTF-
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=
LOGNAME=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=;:tw=;:ow=;:st=;:ex=;:*.tar=;:*.tgz=;:*.arc=;:*.arj=;:*.taz=;:*.lha=;:*.lz4=;:*.lzh=;:*.lzma=;:*.tlz=;:*.txz=;:*.tzo=;:*.t7z=;:*.zip=;:*.z=;:*.Z=;:*.dz=;:*.gz=;:*.lrz=;:*.lz=;:*.lzo=;:*.xz=;:*.bz2=;:*.bz=;:*.tbz=;:*.tbz2=;:*.tz=;:*.deb=;:*.rpm=;:*.jar=;:*.war=;:*.ear=;:*.sar=;:*.rar=;:*.alz=;:*.ace=;:*.zoo=;:*.cpio=;:*.7z=;:*.rz=;:*.cab=;:*.jpg=;:*.jpeg=;:*.gif=;:*.bmp=;:*.pbm=;:*.pgm=;:*.ppm=;:*.tga=;:*.xbm=;:*.xpm=;:*.tif=;:*.tiff=;:*.png=;:*.svg=;:*.svgz=;:*.mng=;:*.pcx=;:*.mov=;:*.mpg=;:*.mpeg=;:*.m2v=;:*.mkv=;:*.webm=;:*.ogm=;:*.mp4=;:*.m4v=;:*.mp4v=;:*.vob=;:*.qt=;:*.nuv=;:*.wmv=;:*.asf=;:*.rm=;:*.rmvb=;:*.flc=;:*.avi=;:*.fli=;:*.flv=;:*.gl=;:*.dl=;:*.xcf=;:*.xwd=;:*.yuv=;:*.cgm=;:*.emf=;:*.axv=;:*.anx=;:*.ogv=;:*.ogx=;:*.aac=;:*.au=;:*.flac=;:*.mid=;:*.midi=;:*.mka=;:*.mp3=;:*.mpc=;:*.ogg=;:*.ra=;:*.wav=;:*.axa=;:*.oga=;:*.spx=;:*.xspf=;:'MACHTYPE=x86_64-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=
OLDPWD=/data/script
OPTERR=
OPTIND=
OSTYPE=linux-gnu
PATH=/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1..0_201/bin:/root/bin:/h
ome/softwares/mysql/bin/PIPESTATUS=([]="")
PPID=
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\$ '
PS2='> '
PS4='+ '
PWD=/root
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
QTLIB=/usr/lib64/qt-3.3/lib
QT_GRAPHICSSYSTEM_CHECKED=
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=
SSH_CLIENT='172.30.1.254 50528 22'
SSH_CONNECTION='172.30.1.254 50528 172.30.1.101 22'
SSH_TTY=/dev/pts/
TERM=xterm
UID=
USER=root
XDG_RUNTIME_DIR=/run/user/
XDG_SESSION_ID=
_='$USER'
colors=/root/.dircolors
name='$USER'
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# set     #显示已定义的所有变量

3>.环境变量

[root@node101.yinzhengjie.org.cn ~]# echo ${age}      #这是一种变量引用的方式

[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# export age=18      #环境变量的声明方式一
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $age       #这是另外一种变量引用的方式 [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# declare -x age=20    #环境变量的声明方式二
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo ${age} [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# unset age         #环境变量的删除
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo ${age} [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# env              #显示所有环境变量
XDG_SESSION_ID=
HOSTNAME=node101.yinzhengjie.org.cn
TERM=xterm
SHELL=/bin/bash
HISTSIZE=
SSH_CLIENT=172.30.1.254
QTDIR=/usr/lib64/qt-3.3
OLDPWD=/data/script
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/
QT_GRAPHICSSYSTEM_CHECKED=
USER=root
LS_COLORS=rs=:di=;:ln=;:mh=:pi=;:so=;:do=;:bd=;;:cd=;;:or=;;:mi=;;;:su=;:sg=;:
ca=;:tw=;:ow=;:st=;:ex=;:*.tar=;:*.tgz=;:*.arc=;:*.arj=;:*.taz=;:*.lha=;:*.lz4=;:*.lzh=;:*.lzma=;:*.tlz=;:*.txz=;:*.tzo=;:*.t7z=;:*.zip=;:*.z=;:*.Z=;:*.dz=;:*.gz=;:*.lrz=;:*.lz=;:*.lzo=;:*.xz=;:*.bz2=;:*.bz=;:*.tbz=;:*.tbz2=;:*.tz=;:*.deb=;:*.rpm=;:*.jar=;:*.war=;:*.ear=;:*.sar=;:*.rar=;:*.alz=;:*.ace=;:*.zoo=;:*.cpio=;:*.7z=;:*.rz=;:*.cab=;:*.jpg=;:*.jpeg=;:*.gif=;:*.bmp=;:*.pbm=;:*.pgm=;:*.ppm=;:*.tga=;:*.xbm=;:*.xpm=;:*.tif=;:*.tiff=;:*.png=;:*.svg=;:*.svgz=;:*.mng=;:*.pcx=;:*.mov=;:*.mpg=;:*.mpeg=;:*.m2v=;:*.mkv=;:*.webm=;:*.ogm=;:*.mp4=;:*.m4v=;:*.mp4v=;:*.vob=;:*.qt=;:*.nuv=;:*.wmv=;:*.asf=;:*.rm=;:*.rmvb=;:*.flc=;:*.avi=;:*.fli=;:*.flv=;:*.gl=;:*.dl=;:*.xcf=;:*.xwd=;:*.yuv=;:*.cgm=;:*.emf=;:*.axv=;:*.anx=;:*.ogv=;:*.ogx=;:*.aac=;:*.au=;:*.flac=;:*.mid=;:*.midi=;:*.mka=;:*.mp3=;:*.mpc=;:*.ogg=;:*.ra=;:*.wav=;:*.axa=;:*.oga=;:*.spx=;:*.xspf=;:MAIL=/var/spool/mail/root
PATH=/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1..0_201/bin:/root/bin:/h
ome/softwares/mysql/bin/PWD=/root
LANG=en_US.UTF-
HISTCONTROL=ignoredups
SHLVL=
HOME=/root
LOGNAME=root
QTLIB=/usr/lib64/qt-3.3/lib
SSH_CONNECTION=172.30.1.254 172.30.1.101
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/
_=/usr/bin/env
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# env | wc -l [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# env           #显示所有环境变量

[root@node101.yinzhengjie.org.cn ~]# printenv         #显示所有环境变量
XDG_SESSION_ID=
HOSTNAME=node101.yinzhengjie.org.cn
TERM=xterm
SHELL=/bin/bash
HISTSIZE=
SSH_CLIENT=172.30.1.254
QTDIR=/usr/lib64/qt-3.3
OLDPWD=/data/script
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/
QT_GRAPHICSSYSTEM_CHECKED=
USER=root
LS_COLORS=rs=:di=;:ln=;:mh=:pi=;:so=;:do=;:bd=;;:cd=;;:or=;;:mi=;;;:su=;:sg=;:
ca=;:tw=;:ow=;:st=;:ex=;:*.tar=;:*.tgz=;:*.arc=;:*.arj=;:*.taz=;:*.lha=;:*.lz4=;:*.lzh=;:*.lzma=;:*.tlz=;:*.txz=;:*.tzo=;:*.t7z=;:*.zip=;:*.z=;:*.Z=;:*.dz=;:*.gz=;:*.lrz=;:*.lz=;:*.lzo=;:*.xz=;:*.bz2=;:*.bz=;:*.tbz=;:*.tbz2=;:*.tz=;:*.deb=;:*.rpm=;:*.jar=;:*.war=;:*.ear=;:*.sar=;:*.rar=;:*.alz=;:*.ace=;:*.zoo=;:*.cpio=;:*.7z=;:*.rz=;:*.cab=;:*.jpg=;:*.jpeg=;:*.gif=;:*.bmp=;:*.pbm=;:*.pgm=;:*.ppm=;:*.tga=;:*.xbm=;:*.xpm=;:*.tif=;:*.tiff=;:*.png=;:*.svg=;:*.svgz=;:*.mng=;:*.pcx=;:*.mov=;:*.mpg=;:*.mpeg=;:*.m2v=;:*.mkv=;:*.webm=;:*.ogm=;:*.mp4=;:*.m4v=;:*.mp4v=;:*.vob=;:*.qt=;:*.nuv=;:*.wmv=;:*.asf=;:*.rm=;:*.rmvb=;:*.flc=;:*.avi=;:*.fli=;:*.flv=;:*.gl=;:*.dl=;:*.xcf=;:*.xwd=;:*.yuv=;:*.cgm=;:*.emf=;:*.axv=;:*.anx=;:*.ogv=;:*.ogx=;:*.aac=;:*.au=;:*.flac=;:*.mid=;:*.midi=;:*.mka=;:*.mp3=;:*.mpc=;:*.ogg=;:*.ra=;:*.wav=;:*.axa=;:*.oga=;:*.spx=;:*.xspf=;:MAIL=/var/spool/mail/root
PATH=/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1..0_201/bin:/root/bin:/h
ome/softwares/mysql/bin/PWD=/root
LANG=en_US.UTF-
HISTCONTROL=ignoredups
SHLVL=
HOME=/root
LOGNAME=root
QTLIB=/usr/lib64/qt-3.3/lib
SSH_CONNECTION=172.30.1.254 172.30.1.101
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/
_=/usr/bin/printenv
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# printenv | wc -l [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# printenv         #显示所有环境变量

[root@node101.yinzhengjie.org.cn ~]# export                #显示所有环境变量
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE=""
declare -x HOME="/root"
declare -x HOSTNAME="node101.yinzhengjie.org.cn"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x 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;
:sg=;:ca=;:tw=;:ow=;:st=;:ex=;:*.tar=;:*.tgz=;:*.arc=;:*.arj=;:*.taz=;:*.lha=;:*.lz4=;:*.lzh=;:*.lzma=;:*.tlz=;:*.txz=;:*.tzo=;:*.t7z=;:*.zip=;:*.z=;:*.Z=;:*.dz=;:*.gz=;:*.lrz=;:*.lz=;:*.lzo=;:*.xz=;:*.bz2=;:*.bz=;:*.tbz=;:*.tbz2=;:*.tz=;:*.deb=;:*.rpm=;:*.jar=;:*.war=;:*.ear=;:*.sar=;:*.rar=;:*.alz=;:*.ace=;:*.zoo=;:*.cpio=;:*.7z=;:*.rz=;:*.cab=;:*.jpg=;:*.jpeg=;:*.gif=;:*.bmp=;:*.pbm=;:*.pgm=;:*.ppm=;:*.tga=;:*.xbm=;:*.xpm=;:*.tif=;:*.tiff=;:*.png=;:*.svg=;:*.svgz=;:*.mng=;:*.pcx=;:*.mov=;:*.mpg=;:*.mpeg=;:*.m2v=;:*.mkv=;:*.webm=;:*.ogm=;:*.mp4=;:*.m4v=;:*.mp4v=;:*.vob=;:*.qt=;:*.nuv=;:*.wmv=;:*.asf=;:*.rm=;:*.rmvb=;:*.flc=;:*.avi=;:*.fli=;:*.flv=;:*.gl=;:*.dl=;:*.xcf=;:*.xwd=;:*.yuv=;:*.cgm=;:*.emf=;:*.axv=;:*.anx=;:*.ogv=;:*.ogx=;:*.aac=;:*.au=;:*.flac=;:*.mid=;:*.midi=;:*.mka=;:*.mp3=;:*.mpc=;:*.ogg=;:*.ra=;:*.wav=;:*.axa=;:*.oga=;:*.spx=;:*.xspf=;:"declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/data/script"
declare -x PATH="/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1.8.0_201/bin:
/root/bin:/home/softwares/mysql/bin/"declare -x PWD="/root"
declare -x QTDIR="/usr/lib64/qt-3.3"
declare -x QTINC="/usr/lib64/qt-3.3/include"
declare -x QTLIB="/usr/lib64/qt-3.3/lib"
declare -x QT_GRAPHICSSYSTEM_CHECKED=""
declare -x SHELL="/bin/bash"
declare -x SHLVL=""
declare -x SSH_CLIENT="172.30.1.254 50528 22"
declare -x SSH_CONNECTION="172.30.1.254 50528 172.30.1.101 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID=""
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# export | wc -l [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# export         #显示所有环境变量

[root@node101.yinzhengjie.org.cn ~]# declare -x        #显示所有环境变量
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE=""
declare -x HOME="/root"
declare -x HOSTNAME="node101.yinzhengjie.org.cn"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x 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;
:sg=;:ca=;:tw=;:ow=;:st=;:ex=;:*.tar=;:*.tgz=;:*.arc=;:*.arj=;:*.taz=;:*.lha=;:*.lz4=;:*.lzh=;:*.lzma=;:*.tlz=;:*.txz=;:*.tzo=;:*.t7z=;:*.zip=;:*.z=;:*.Z=;:*.dz=;:*.gz=;:*.lrz=;:*.lz=;:*.lzo=;:*.xz=;:*.bz2=;:*.bz=;:*.tbz=;:*.tbz2=;:*.tz=;:*.deb=;:*.rpm=;:*.jar=;:*.war=;:*.ear=;:*.sar=;:*.rar=;:*.alz=;:*.ace=;:*.zoo=;:*.cpio=;:*.7z=;:*.rz=;:*.cab=;:*.jpg=;:*.jpeg=;:*.gif=;:*.bmp=;:*.pbm=;:*.pgm=;:*.ppm=;:*.tga=;:*.xbm=;:*.xpm=;:*.tif=;:*.tiff=;:*.png=;:*.svg=;:*.svgz=;:*.mng=;:*.pcx=;:*.mov=;:*.mpg=;:*.mpeg=;:*.m2v=;:*.mkv=;:*.webm=;:*.ogm=;:*.mp4=;:*.m4v=;:*.mp4v=;:*.vob=;:*.qt=;:*.nuv=;:*.wmv=;:*.asf=;:*.rm=;:*.rmvb=;:*.flc=;:*.avi=;:*.fli=;:*.flv=;:*.gl=;:*.dl=;:*.xcf=;:*.xwd=;:*.yuv=;:*.cgm=;:*.emf=;:*.axv=;:*.anx=;:*.ogv=;:*.ogx=;:*.aac=;:*.au=;:*.flac=;:*.mid=;:*.midi=;:*.mka=;:*.mp3=;:*.mpc=;:*.ogg=;:*.ra=;:*.wav=;:*.axa=;:*.oga=;:*.spx=;:*.xspf=;:"declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/data/script"
declare -x PATH="/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1.8.0_201/bin:
/root/bin:/home/softwares/mysql/bin/"declare -x PWD="/root"
declare -x QTDIR="/usr/lib64/qt-3.3"
declare -x QTINC="/usr/lib64/qt-3.3/include"
declare -x QTLIB="/usr/lib64/qt-3.3/lib"
declare -x QT_GRAPHICSSYSTEM_CHECKED=""
declare -x SHELL="/bin/bash"
declare -x SHLVL=""
declare -x SSH_CLIENT="172.30.1.254 50528 22"
declare -x SSH_CONNECTION="172.30.1.254 50528 172.30.1.101 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID=""
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# declare -x | wc -l [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# declare -x       #显示所有环境变量

bash内建的环境变量如下:
PATH
SHELL
USER
UID
HOME
PWD
SHLVL
LANG
MAIL
HOSTNAME
HISTSIZE
_ 下划线

bash内建的环境变量

4>.只读变量

[root@node101.yinzhengjie.org.cn ~]# readonly installDir="C:\Users\yinzhengjie"    #定义只读变量方式一
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $installDir
C:\Users\yinzhengjie
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# declare -r workDir="D:\Users\yinzhengjie"    #定义只读变量方式二
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $workDir
D:\Users\yinzhengjie
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# declare -r installDir="D:\Users\yinzhengjie"   #只读变量只能声明,但不能修改和删除
-bash: declare: installDir: readonly variable
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# readonly -p                 #查看只读变量
declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shel
l:progcomp:promptvars:sourcepath"declare -ir BASHPID
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -ir EUID=""
declare -ir PPID=""
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID=""
declare -r installDir="C:\\Users\\yinzhengjie"
declare -r workDir="D:\\Users\\yinzhengjie"
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# readonly -p     #查看只读变量

5>.位置变量:在脚本代码中调用通过命令行传递给脚本的参数

$, $,...,$n
  $n这里的n为数字,$0代表命令本身,如$1.$2分别对应第1、第2个参数,10以上参数需要用大括号"{}"包含,如"$10"
  shift [n]换位置
$
  命令本身
$*
  传递给脚本的所有参数,全部参数合为一个字符串
$@
  传递给脚本的所有参数,每个参数为独立字符串,注意:$@ $* 只在被双引号包起来的时候才会有差异

$#
  传递给脚本的参数的个数 set --
  清空所有位置变量
[root@node101.yinzhengjie.org.cn ~]# vim shell/arg.sh        #编写测试脚本验证位置变量的作用
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat shell/arg.sh
#!/bin/bash
#
#********************************************************************
#Author: yinzhengjie
#QQ:
#Date: --
#FileName: shell/arg.sh
#URL: http://www.cnblogs.com/yinzhengjie
#Description: The test script
#Copyright notice: original works, no reprint! Otherwise, legal liability will be investigated.
#******************************************************************** echo "1st arg is $1"
echo "2st arg is $2"
echo "3st arg is $3"
echo "10st arg is ${10}"
echo "11st arg is ${11}"
echo "12st arg is ${12}"
echo "All arg are $*"
echo "All arg are $@"
echo "The number of arg is $#"
echo "Script name is `basename $0`"
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# bash shell/arg.sh {A..Z}
1st arg is A
2st arg is B
3st arg is C
10st arg is J
11st arg is K
12st arg is L
All arg are A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
All arg are A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
The number of arg is
Script name is arg.sh
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# vim shell/arg.sh        #编写测试脚本验证位置变量的作用

[root@node101.yinzhengjie.org.cn ~]# cd shell/
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# vim father.sh
[root@node101.yinzhengjie.org.cn ~/shell]# vim son.sh
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# cat father.sh
#!/bin/bash
#
#********************************************************************
#Author: yinzhengjie
#QQ:
#Date: --
#FileName: shell/father.sh
#URL: http://www.cnblogs.com/yinzhengjie
#Description: The test script
#Copyright notice: original works, no reprint! Otherwise, legal liability will be investigated.
#******************************************************************** echo "All arg are $*" #注意:"$@" "$*"只在被双引号包起来的时候才会有差异
son.sh "$*"
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# cat son.sh
#!/bin/bash
#
#********************************************************************
#Author: yinzhengjie
#QQ:
#Date: --
#FileName: shell/son.sh
#URL: http://www.cnblogs.com/yinzhengjie
#Description: The test script
#Copyright notice: original works, no reprint! Otherwise, legal liability will be investigated.
#******************************************************************** echo "1st arg is $1"
echo "2st arg is $2"
echo "3st arg is $3"
echo "11st arg is ${11}"
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# chmod +x father.sh son.sh
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# tail - ~/.bashrc
PATH=$PATH:/root/shell
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# father.sh {a..z}
All arg are a b c d e f g h i j k l m n o p q r s t u v w x y z
1st arg is a b c d e f g h i j k l m n o p q r s t u v w x y z
2st arg is
3st arg is
11st arg is
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# vim father.sh
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# cat father.sh
#!/bin/bash
#
#********************************************************************
#Author: yinzhengjie
#QQ:
#Date: --
#FileName: shell/father.sh
#URL: http://www.cnblogs.com/yinzhengjie
#Description: The test script
#Copyright notice: original works, no reprint! Otherwise, legal liability will be investigated.
#******************************************************************** echo "All arg are $@" #注意:"$@" "$*"只在被双引号包起来的时候才会有差异
son.sh "$@"
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# father.sh {a..z}
All arg are a b c d e f g h i j k l m n o p q r s t u v w x y z
1st arg is a
2st arg is b
3st arg is c
11st arg is k
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]#

"$@"和"$*"案例(温馨提示: "$@"和"$*"只在被双引号包起来的时候才会有差异)

[root@node101.yinzhengjie.org.cn ~/shell]# vim vars
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# cat vars
COLOR="\033[1;31m"
COLOREND="\033[0m"
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# vim rm.sh
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# vim rm.sh
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# cat rm.sh
#!/bin/bash
#
#********************************************************************
#Author: yinzhengjie
#QQ:
#Date: --
#FileName: rm.sh
#URL: http://www.cnblogs.com/yinzhengjie
#Description: The test script
#Copyright notice: original works, no reprint! Otherwise, legal liability will be investigated.
#******************************************************************** #导入其它脚本中的变量,在当前脚本就不用重复定义了,直接调用被调用者的变量即可
. /root/shell/vars DESTDIR=/tmp/`date +%F_%T`
mkdir $DESTDIR
mv $* $DESTDIR
echo -e "$COLOR$* is moved to $DESTDIR$COLOEREND"
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# chmod +x rm.sh
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# touch /data/f1.txt /data/f2.txt
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# rm.sh !*      #"!*"表示上一条执行命令的参数
rm.sh /data/f1.txt /data/f2.txt
/data/f1.txt /data/f2.txt is moved to /tmp/--21_05::
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# ll /tmp/--21_05::
total
-rw-r--r-- root root Nov : f1.txt
-rw-r--r-- root root Nov : f2.txt
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# alias rm=/root/shell/rm.sh    #将系统的rm命令换成咱们自定义的rm.sh命令。
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# rm /etc/issue /etc/motd
/etc/issue /etc/motd is moved to /tmp/--21_05::
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# ll /tmp/--21_05::
total
-rw-r--r--. root root Nov issue
-rw-r--r--. root root Jun motd
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# mv /tmp/--21_05::/* /etc/
[root@node101.yinzhengjie.org.cn ~/shell]#

自定义垃圾箱,将系统的rm命令换成咱们自定义的rm.sh命令,避免生产环境中的无删除(初级版本)

四.退出状态

1>.进程使用退出状态来报告成功或失败

  0 代表成功,-255代表失败
  $? 变量保存最近的(上一条执行的)命令退出状态
[root@node101.yinzhengjie.org.cn ~]# ping -c  -w  www.baidu.com &> /dev/null
[root@node101.yinzhengjie.org.cn ~]# echo $? [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# echo $?

2>.bash自定义退出状态码

exit [n]:
自定义退出状态码
温馨提示:
  脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
  如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
[root@node101.yinzhengjie.org.cn ~/shell]# vim test.sh
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# cat test.sh
#!/bin/bash
#
#********************************************************************
#Author: yinzhengjie
#QQ:
#Date: --
#FileName: test.sh
#URL: http://www.cnblogs.com/yinzhengjie
#Description: The test script
#Copyright notice: original works, no reprint! Otherwise, legal liability will be investigated.
#******************************************************************** ls -l
exit
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# bash test.sh
total
-rw-r--r-- root root Nov : arg.sh
-rwxr-xr-x root root Nov : backup_etc.sh
-rwxr-xr-x root root Nov : father.sh
-rwxr-xr-x root root Nov : rm.sh
-rwxr-xr-x root root Nov : son.sh
-rw-r--r-- root root Nov : test.sh
-rw-r--r-- root root Nov : vars
[root@node101.yinzhengjie.org.cn ~/shell]#
[root@node101.yinzhengjie.org.cn ~/shell]# echo $? [root@node101.yinzhengjie.org.cn ~/shell]#

在脚本中定义exit退出时返回的状态码

[root@yinzhengjie shell]# more argv3.sh
#!/bin/bash
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie
#EMAIL:y1053419035@qq.com echo "当前的进程PID是:$$" find /root -name yinzhengjie.sh > res.txt & echo "后台执行的进程是:$!"
[root@yinzhengjie shell]#

案例展示二

五.变量赋值

  通过x的值判断y是否存在,可以用下面的这种方式:

例子:测试x=${y-新值},如下图所示。

删除上述变量,在观察结果,如下图所示。

六.高级变量用法-有类型变量

Shell变量一般是无类型的,但是bash Shell提供了declare和typeset两个命令用于指定变量的类型,两个命令是等价的

declare [选项] 变量名
  -r 声明或显示只读变量
  -i 将变量定义为整型数
  -a 将变量定义为数组
  -A 将变量定义为关联数组
  -f 显示已定义的所有函数名及其内容
  -F 仅显示已定义的所有函数名
  -x 声明或显示环境变量和函数
  -l 声明变量为小写字母 declare –l var=UPPER
  -u 声明变量为大写字母 declare –u var=lower

七.eval命令

  eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量.该命令对变量进行两次扫描
[root@node101.yinzhengjie.org.cn ~]# whoami
root
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# CMD="whoami"
[root@node101.yinzhengjie.org.cn ~]# echo $CMD
whoami
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# eval $CMD
root
[root@node101.yinzhengjie.org.cn ~]#

参考案例1

[root@node101.yinzhengjie.org.cn ~]# n=
[root@node101.yinzhengjie.org.cn ~]# echo $n [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo {..$n}
{..}
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# eval echo {..$n} [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

参考案例2

八.间接变量引用

如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就称为间接变量引用

variable1的值是variable2,而variable2又是变量名,variable2的值为value,间接变量引用是指通过variable1获得变量值value的行为
variable1=variable2
variable2=value bash Shell提供了两种格式实现间接变量引用
eval tempvar=\$$variable1
tempvar=${!variable1}
[root@node101.yinzhengjie.org.cn ~]# NAME100=NAME200
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# IP100=IP200
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# IP200="172.30.1.200"
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# IP=${!IP100}
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $IP
172.30.1.200
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# eval IP2=\$$IP100
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $IP2
172.30.1.200
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

参考案例1

[root@node101.yinzhengjie.org.cn ~]# title=CEO
[root@node101.yinzhengjie.org.cn ~]# CEO="yinzhengjie"
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo $title
CEO
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo ${!title}
yinzhengjie
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# eval echo \$$title
yinzhengjie
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

参考案例2

九.创建临时文件和安装复制文件命令

1>.创建临时文件

mktemp命令:创建并显示临时文件,可避免冲突

mktemp [OPTION]... [TEMPLATE]
TEMPLATE: filenameXXX
X至少要出现三个 常用选项(OPTION):
  -d: 创建临时目录
  -p DIR或--tmpdir=DIR:指明临时文件所存放目录位置
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# mktemp backup/fileXXX      #创建一个临时文件(注意整个"X"字母要大写哟~)
backup/fileWBI
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
-rw------- root root Nov : fileWBI
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# mktemp backup/fileXXXXXX     #字母"X"的个数表示file后面跟的随机字母个数
backup/fileRzD8PZ
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
-rw------- root root Nov : fileRzD8PZ
-rw------- root root Nov : fileWBI
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# mktemp -d backup/fileXXXXXX    #创建一个临时目录
backup/filevlxViC
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
-rw------- root root Nov : fileRzD8PZ
drwx------ root root Nov : filevlxViC
-rw------- root root Nov : fileWBI
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# mktemp -d -p backup/ fileXXXXXX  #指明临时文件所存放目录位置
backup/fileuoXi4V
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
-rw------- root root Nov : fileRzD8PZ
drwx------ root root Nov : fileuoXi4V
drwx------ root root Nov : filevlxViC
-rw------- root root Nov : fileWBI
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

参考案例1

[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# tmpdir=`mktemp -d backup/testdirXXX` #创建临时目录
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
drwx------ root root Nov : testdirxRs
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# mktemp --tmpdir=/root/backup testXXXXXX #指明临时文件所存放目录位置
/root/backup/test5zib2x
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
-rw------- root root Nov : test5zib2x
drwx------ root root Nov : testdirxRs
[root@node101.yinzhengjie.org.cn ~]#

参考案例2

2>.安装复制文件

install命令:(相当于mkdir,cp,chown,chmod命令的集成)
  install [OPTION]... [-T] SOURCE DEST 单文件
  install [OPTION]... SOURCE... DIRECTORY
  install [OPTION]... -t DIRECTORY SOURCE...
  install [OPTION]... -d DIRECTORY...创建空目录 常用选项(OPTION):
  -m MODE,默认755
  -o OWNER
  -g GROUP
[root@node101.yinzhengjie.org.cn ~]# ll /etc/issue
-rw-r--r--. root root Nov /etc/issue
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# install -m -o yinzhengjie -g root /etc/issue /root/backup/issue_bak
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
-rw------- yinzhengjie root Nov : issue_bak
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# install -m -d /root/backup/{nginx,mysql,python}
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll backup/
total
-rw------- yinzhengjie root Nov : issue_bak
drwx------ root root Nov : mysql
drwx------ root root Nov : nginx
drwx------ root root Nov : python
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

参考案例

十.小试牛刀

、编写脚本 systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小
、编写脚本 backup.sh,可实现每日将/etc/目录备份到/backup/etcYYYY-mm-dd中
、编写脚本 disk.sh,显示当前硬盘分区中空间利用率最大的值
、编写脚本 links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序

用Shell编写的俄罗斯方块代码的更多相关文章

  1. Shell编写字符菜单管理-8

    第8章 Shell编写字符菜单管理 一.shell函数定义function menu(){ echo 'this is a func!!';} 二.shell函数使用menu 三.cat命令的here ...

  2. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!

    本文主要展示的是通过使用python和PyInstaller来构建恶意软件的一些poc. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!众所周知的,恶意软件如果影响到了他人的生 ...

  3. Shell编写8点建议

    这八个建议,来源于键者几年来编写 shell 脚本的一些经验和教训.事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条.毫不夸张地说,每条都是精挑细选的,虽然有几点算是老生 ...

  4. shell编写一个批量添加用户脚本

                                                          shell编写一个批量添加用户脚本 5.1问题 本例要求在虚拟机server0上创建/roo ...

  5. shell编写一个判断脚本

                                                              shell编写一个判断脚本 4.1问题 本例要求在虚拟机server0上创建/roo ...

  6. 每周一书-编写高质量代码:改善C程序代码的125个建议

    首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10 ...

  7. 编写高质量代码改善C#程序的157个建议——导航开篇

    前言 由于最近工作重心的转移,原来和几个同事一起开发的项目也已经上线了,而新项目就是在现有的项目基础上进行优化延伸扩展.打个比方,现在已经上线的项目行政案件的Web管理网站(代码还没那么多相比较即将要 ...

  8. 博友的 编写高质量代码 改善java程序的151个建议

    编写高质量代码 改善java程序的151个建议 http://www.cnblogs.com/selene/category/876189.html

  9. 编写高质量代码--改善python程序的建议(六)

    原文发表在我的博客主页,转载请注明出处! 建议二十八:区别对待可变对象和不可变对象 python中一切皆对象,每一个对象都有一个唯一的标识符(id()).类型(type())以及值,对象根据其值能否修 ...

随机推荐

  1. /var/lib/mysql 的访问权限问题 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    mysql 登录不进去 提示Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) she ...

  2. ECSHOP广告调用广告位添加到首页顶部通栏教程

    ECSHOP广告调用广告位添加到首页顶部通栏教程 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2012-05-26   ECSHOP系统默认预留的广告位很少,如何才能 ...

  3. laravel 数据库获取值的常用方法

    ---恢复内容开始--- find($id) 需要一个主键$id并返回一个模型对象,若不存在则返回null findOrFail($id) 需要一个主键$id并返回一个模型对象,若不存在则发生错误,抛 ...

  4. Linux命令博客目录

    Linux 目录结构 Linux命令(一) pwd ,cd Linux命令(二) 复制文件 cp Linux命令(三) 移动文件 mv Linux命令(四)删除文件 rm Linux终端常用快捷键 L ...

  5. [kali] 安装完kali之后允许远程ssh

    1. 安装kali 2.控制台登录kali 3. 修改 /etc/ssh/sshd_config 4.将 permitrootlogin 前面的注释去掉,并且后面改为yes 5.然后重启ssd服务 / ...

  6. Java之JSON操作(Jackson)

    Java to JSON: package json.jackson; import bean.User; import com.fasterxml.jackson.databind.ObjectMa ...

  7. python+django+uwsgi 搭建环境

    第一步: 搭建python环境 最好使用  pyenv可以很好的管理多版本下的python环境 第二步:搭建django环境 使用    pip install django==1.12.1   来安 ...

  8. POJ3176-基础DP

    很基础的dp题.有一头奶牛想接尽量多的苹果,有w此移动机会. dp[i][w] = max(dp[i-1][w+1] + 能否吃到苹果 ,dp[i-1][w] + 能否吃到苹果)  //从上一分钟是否 ...

  9. codeforces 797B

    B. Odd sum time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  10. MT【240】6*6放黑白子

    $6*6$的方格中放三个完全相同的黑子和三个完全相同的白子,要求每行每列都有一个棋子,且每一格只有一个棋子.问有多少不同放法? 解:$\dfrac{36*25*16*9*4*1}{3!*3!}=144 ...