/**
*@author StormMaybin
*@date 2017-01-06
*/
生命不息。奋斗不止
前言:由于最近需要用shell写个脚本,去检测服务器,之前接触过linux简单的一些命令,了解过一些简单的shell知识,最后因为比较忙,还是放弃了,这次下定决心重新拿起shell,希望自己能坚持下去吧!fighting !
第一个shell程序
第一个shell小程序输出简单的HelloWorld
#!/bin/bash
#@author StormMa
#@date 2017-01-06
#@describe 第一个shell小程序
#----
echo "Hello World"
第一行的#!/bin/bash是说明这个shell程序是由哪个shell解释执行。
Shell中变量总结
首先,在Shell中,变量分为:
- 用户自定义变量
- 环境变量
- 位置参数变量
- 预定义变量
用户自定义变量
#!/bin/bash
#@author StormMa
#@date 2017-01-06
#@describe 用户自定义变量
#定义变量,注意一点,shell中,这种定义方式定义的变量都是字符串类型
name=StormMa
age=20
num1=1
num2=3
echo "$num1+$num2"
#声明变量num是int类型
declare -i num3
num3=$num1+$num2
echo $num3
#取消num3的整形属性
declare +i num3
num3=$num1+$num2
echo $num3
环境变量
#!/bin/bash
#@author StormMa
#@date 2017-01-06
#@describe 环境变量
#--------------
echo "环境变量的使用"
echo "current user's name = $LOGNAME"
echo "current user's home = $HOME"
echo "path = $PATH"
echo "current path = $PWD"
BASH:
展开为调用bash实例时使用的全路径名
BASH_ENV:
和ENV一样,但只可在bash 2.0或更高版本中设置 16
BASH_VERSINFO:
使用2.0以上版本的bash时,展开为版本信息 16
BASH_VERSION:
展开为当前bash实例的版本号
CDPATH:
cd命令的搜索路径。它是以冒号分隔的目录列表,shell通过它来搜索cd命令指定的目标目录。例如.:~:/usr
COLUMNS:
设置该变量就给shell编辑模式和选择的命令定义了编辑窗口的宽度
DIRSTACK:
在2.0或以上版本的bash中,代表目录栈的当前内容
EDITOR:
内置编辑器emacs、gmacs或vi的路径名
ENV:
每一个新的bash shell(包括脚本)启动时执行的环境文件。通常赋予这个变量的文件名是.bashrc。ENV的值被解释为路径名前,shell先要对其进行参量扩展,命令替换和算术扩展
EUID:
展开为在shell启动时被初始化的当前用户的有效ID
FCEDIT
fc命令的默认编辑器名
FIGNORE:
执行文件名补全时可忽略的以冒号分隔的后缀列表。以FIGNORE中任一项为后缀的文件名被从匹配的文件名列表中排除。例如值为.o:~
FORMAT:
用来格式化在命令管道上的time关键字的输出
GLOBIGNORE:
在文件名扩展(称为globbing)时被忽略的文件列表
GROUPS:
当前用户所属的组
HISTCMD:
当前命令的历史编号或在历史清单中的序号。如果HISTCMD被复位,即使它随后就会重置,也将失去它的特殊属性
HISTCONTROL:
如果设置了ignorespace值,以一个空格符开头的行将不会进入历史清单。如果设置了ignoredups值,那和前一个历史行匹配的行不会进入。值ignoreboth结合了这两个选项。如果被复位,或设置成除了上面所说的任意其他值时,所有被解释器所读的行都将保存到历史清单中
HISTFILE:
指定保存命令行历史的文件。默认值是~/.bash_history。如果被复位,交互式shell退出时将不保存命令行历史
HISTFILESIZE:
历史文件能包含的最大行数。当给这个变量赋值后,如果有必要,历史文件将被截尾,以使包含的行数不超过这个数。默认值是500
HISTSIZE:
记录在命令行历史文件中的命令数。默认是500
HOME:
主目录。未指定目录时,cd命令将转向该目录
HOSTFILE:
包含一个格式和/etc/hosts一样的文件的名称,当shell需要补全一个主机名时将读取该文件。文件可以交互式更改。下一次试图补全主机名时,bash将新文件的内容添加到已经存在的数据库中
HOSTTYPE:
自动设置正在运行bash的机器的类型。默认值是由系统决定的
IFS:
内部字段分隔符,一般是空格符、制表符和换行符,用于由命令替换,循环结构中的表和读取的输入产生的词的字段划分
IGNOREEOF:
控制shell接收到单独一个EOF字符作为输入时的行为。如果设置,它的值就是shell退出前在一个输入行的最前面键入的连续EOF字符的个数。如果变量存在但没有一个数字值,或没有值,那么默认值是10。如果它不存在,EOF意味着给shell的输入的终止。它只在交互式shell中有效
INPUTRC:
readline启动文件的文件名,取代默认的~/.inputrc
LANG:
用来为没有以LC_开头的变量明确选取的种类确定locale类
LC_ALL:
忽略LANG和任何其他LC_变量的值
LC_COLLATE:
确定对路径名扩展的结果进行排序时的整理顺序,以及匹配文件名与模式时的范围表达式,等价类和整理序列的行为
LC_MESSAGES:
确定用于转换前面有一个” ”的双引号串的localeLINENO:每次shell在一个脚本或函数中替换代表当前连续行号(从1开始)的十进制数时,都将引用该参数MACHTYPE:包含一个描述正在运行bash的系统的串MAIL:如果该参数被设置为某个邮件文件的名称,而MAILPATH未被设置,当邮件到达MAIL指定的文件时,shell会通知用户MAILWARNING:如果设置了该变量,当bash发现用于检查邮件的文件在上次检查后又被访问了,将打印消息“Themailin[filenamewheremailisstored]hasbeenread”MAILCHECK:这个参数定义shell将隔多长时间(以秒为单位)检查一次由参数MAILPATH或MAILFILE指定的文件,看看是否有邮件到达。默认值是600秒(10分钟)。如果将它设为0,shell每次输出主提示符之前都会去检查邮件MAILPATH:由冒号分隔的文件名列表。如果设置了这个参数,只要有邮件到达任何一个由它指定的文件,shell都会通知用户。每个文件名后面都可以跟一个百分号和一条消息,当文件修改时间发生变化时,shell会显示这条消息。默认的消息是:YouhavemailOLDPWD:前一个工作目录OPTARG:上一个由getopts内置命令处理的选项参数的值OPTERR:如果设置成1,显示来自getopts内置命令的错误信息OPTIND:下一个由getopts内置命令处理的参数的序号OSTYPE:自动设置成一个串,该串描述正在运行bash的操作系统。默认值由系统决定PATH:命令搜索路径。一个由冒号分隔的目录列表,shell用它来搜索命令。默认路径由系统决定,并且由安装bash的管理员设置。一个普通值为/usr/gnu/bin:/usr/local/bin:/usr/ucb:/usr/bin:PIPESTATUS:一个数组,包含一列最近在管道执行的前台作业的进程退出状态值PPID:父进程的进程IDPROMPTCOMMAND:赋给这个变量的命令将在主提示符显示前执行PS1:主提示符串,默认值是
PS2:
次提示符串,默认值是>
PS3:
与select命令一起使用的选择提示符串,默认值是#?
PS4:
当开启追踪时使用的调试提示符串,默认值是+。追踪可以用set –x开启
PWD:
当前工作目录。由cd设置
RANDOM:
每次引用该变量,就产生一个随机整数。随机数序列可以通过给RANDOM赋值来初始化。如果RANDOM被复位,即使随后再设置,它也将失去特定的属性
REPLY:
当没有给read提供参数时设置
SECONDS:
每次SECONDS被引用,将返回调用shell以来的秒数。如果给SECONDS赋一个值,以后引用返回的值将是赋值以来的秒数加上所赋的值。如果SECONDS被复位,即使随后再设置,它也将失去特定的属性
SHELL:
当调用shell时,它扫描环境变量以寻找该名字。shell给PATH、PS1、PS2、MAILCHECK和IFS设置默认值。HOME和MAIL由login(1)设置
SHELLOPTS:
包含一列开启的shell选项,比如braceexpand、hashall、monitor等
SHLVL:
每启动一个bash实例时将其加1
TMOUT:
设置退出前等待输入的秒数
UID:
展开为当前用户的用户ID,在shell启动时初始化
位置参数和预定义变量
# : 传递到脚本的参数个数* : 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9个
$$ : 脚本运行的当前进程 ID号
$! : 后台运行的最后一个进程的进程 ID号
$@ : 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- : 显示shell使用的当前选项,与 set命令功能相同
$? : 显示最后命令的退出状态。 0表示没有错误,其他任何值表明有错误。
#!/bin/bash
#@author StormMa
#@date 2017-01-06
#@describe 位置参数
#---------------
echo "位置参数的使用"
echo "参数的个数 = $#"
echo "第一个参数是$1"
echo "第二个参数是$2"
echo "第三个参数是$3"
echo "$1 $2 $3"
echo "当前运行进程id是$$"
#&是指后台运行
sudo find / -name HelloWorld.sh &
echo "后台进程的id是$!"
kill $!
第一天笔记完。