用Shell编写的俄罗斯方块代码
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
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编写的俄罗斯方块代码的更多相关文章
- Shell编写字符菜单管理-8
第8章 Shell编写字符菜单管理 一.shell函数定义function menu(){ echo 'this is a func!!';} 二.shell函数使用menu 三.cat命令的here ...
- 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!
本文主要展示的是通过使用python和PyInstaller来构建恶意软件的一些poc. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!众所周知的,恶意软件如果影响到了他人的生 ...
- Shell编写8点建议
这八个建议,来源于键者几年来编写 shell 脚本的一些经验和教训.事实上开始写的时候还不止这几条,后来思索再三,去掉几条无关痛痒的,最后剩下八条.毫不夸张地说,每条都是精挑细选的,虽然有几点算是老生 ...
- shell编写一个批量添加用户脚本
shell编写一个批量添加用户脚本 5.1问题 本例要求在虚拟机server0上创建/roo ...
- shell编写一个判断脚本
shell编写一个判断脚本 4.1问题 本例要求在虚拟机server0上创建/roo ...
- 每周一书-编写高质量代码:改善C程序代码的125个建议
首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10 ...
- 编写高质量代码改善C#程序的157个建议——导航开篇
前言 由于最近工作重心的转移,原来和几个同事一起开发的项目也已经上线了,而新项目就是在现有的项目基础上进行优化延伸扩展.打个比方,现在已经上线的项目行政案件的Web管理网站(代码还没那么多相比较即将要 ...
- 博友的 编写高质量代码 改善java程序的151个建议
编写高质量代码 改善java程序的151个建议 http://www.cnblogs.com/selene/category/876189.html
- 编写高质量代码--改善python程序的建议(六)
原文发表在我的博客主页,转载请注明出处! 建议二十八:区别对待可变对象和不可变对象 python中一切皆对象,每一个对象都有一个唯一的标识符(id()).类型(type())以及值,对象根据其值能否修 ...
随机推荐
- /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 ...
- ECSHOP广告调用广告位添加到首页顶部通栏教程
ECSHOP广告调用广告位添加到首页顶部通栏教程 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2012-05-26 ECSHOP系统默认预留的广告位很少,如何才能 ...
- laravel 数据库获取值的常用方法
---恢复内容开始--- find($id) 需要一个主键$id并返回一个模型对象,若不存在则返回null findOrFail($id) 需要一个主键$id并返回一个模型对象,若不存在则发生错误,抛 ...
- Linux命令博客目录
Linux 目录结构 Linux命令(一) pwd ,cd Linux命令(二) 复制文件 cp Linux命令(三) 移动文件 mv Linux命令(四)删除文件 rm Linux终端常用快捷键 L ...
- [kali] 安装完kali之后允许远程ssh
1. 安装kali 2.控制台登录kali 3. 修改 /etc/ssh/sshd_config 4.将 permitrootlogin 前面的注释去掉,并且后面改为yes 5.然后重启ssd服务 / ...
- Java之JSON操作(Jackson)
Java to JSON: package json.jackson; import bean.User; import com.fasterxml.jackson.databind.ObjectMa ...
- python+django+uwsgi 搭建环境
第一步: 搭建python环境 最好使用 pyenv可以很好的管理多版本下的python环境 第二步:搭建django环境 使用 pip install django==1.12.1 来安 ...
- POJ3176-基础DP
很基础的dp题.有一头奶牛想接尽量多的苹果,有w此移动机会. dp[i][w] = max(dp[i-1][w+1] + 能否吃到苹果 ,dp[i-1][w] + 能否吃到苹果) //从上一分钟是否 ...
- codeforces 797B
B. Odd sum time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- MT【240】6*6放黑白子
$6*6$的方格中放三个完全相同的黑子和三个完全相同的白子,要求每行每列都有一个棋子,且每一格只有一个棋子.问有多少不同放法? 解:$\dfrac{36*25*16*9*4*1}{3!*3!}=144 ...