将他们列出在圆括号中,各值以空格分隔。例如mytest=(one two three four five)
显示整个数组变量 使用星号通配符作为索引值。例如echo ${mytest[*]} (不能有空格)
反引号(`)
用于将shell输出赋值给变量(用反引号包围整个命令)
输出重定向
>
>>追加
输入重定向
<
<<内置输入重定向(命令行用)
特殊符号(如<,>)需要转义(\<,>)
bash中为变量指定数学表达式的值时,用$和[]把等式括起来
使用等号(=)为变量赋值时,等号两边不能有空格。
用scale=n指定结果的小数位数
bc中可以使用变量,不用加$,但在shell中使用bc则需要。
shell脚本中使用bc variable=’echo “options;expression” | bc’(其中options设置变量,如scale=4,expression为 数学表达式)
if-then-else-fi
if-then-elif-then-fi
if test condition
then
commands
fi
同
if [ condition ]
then
commands
fi
复合条件检查
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
case格式:
case $variable in
var1)
command
;;
var2)
command
;;
*)
command
;;
esac
for var in list
do
commands
done
内部字段分隔符IFS(默认 空格、制表符、换行符)
限制bash shell看作是字段分隔符的字符IFS=$’\n’
for file in /home/rich/test/*
C式for循环
for((variable assignment;condition;iteration process))
do
commands
done
while test command (或者while [ command ] )
do
other command
done
while command1
test command2 (由于是两条语句因此需要换行 或使用;隔开)
do
other command
done
until test command (由于是两条语句因此需要换行 或使用;隔开)
do
other command
done
until command1
test command2
do
other command
done
处理循环的输出
在done后使用管道或重定向循环输出结果。
例如done > output.txt
0为程序名称 1第一个参数$2第二个参数,以此类推。
basename只返回程序名称,不带路径
$#
执行脚本时包含的命令行参数个数。(大括号中将$替换为!)
$*
将命令行提供的所有参数作为一个单词处理;
$@
将命令行中提供的所有参数作为同一个字符串中的多个单词处理,允许对其中的值进行迭代;
Shift命令默认将每个参数变量左移一个位置,变量$1的值被丢弃。
Shift n n为偏移量
Shell使用双破折号(——)指示选项列表的结束。
格式:getopt options optstring parameters
选项字符串optstring,定义了命令行中的有效选项字母,在每个需要参数值的选项字母后放置一个冒号
如果希望忽略错误消息,命令中使用-q选项
脚本中使用getopt命令:
Set命令的一个选项是双破折号,表示将命令行参数变量替换为set命令的命令行的值。
Set – getopt –q ab:c “$@”
(注意:是反引号)
命令格式getopts optstring variable
如果要禁止输出错误消息,使选项字符串以冒号开头。
参数被放入variable中。
环境变量OPTARG中包含需要选项的参数值;OPTIND的值表示getopts停止处理时在参数列表中的位置。
当getopts命令解析命令行选项时,会将打头的破折号去掉。
Getopts特性:①可以在参数之中包含空格,②选项字母和参数值中间可以没有空格;
getopt会将选项值和参数当做字符串处理,在使用数字作为选项值或参数时使用getopts更好一些。
基本读取read –p 指定提示
在read命令行中不指定变量时,将接收到的数据放置在环境变量REPLY中;
-t选项指定计数器,计数器满时,read命令返回非零退出状态。(if read –t 5 then/else fi)
默读(不希望输出显示)-s(数据显示,只是文本颜色与背景色相同)
读取文件
2>
2> file2 1> file1
&> file
exec 0< file
使用exec命令为输出分配文件描exec 3>test3out echo “XXX” >&3
定向文件描exec 3>&1;exec 1>testout;exec 1>&3
入文件描exec 3<&0;exec 0
取/写入文件描述符 exec 3<> inputoutputfile
关闭文件描述符 exec 3>&- (输入输出同时关闭)
lsof –p 制定进程(PID) $$为当前的PID
lsof –d 指定要显示的文件描述符编号 r读取w写入u读写
lsof –a 用来连接其他两个选项的结果
将STDERR重定向到空文件/dev/null
输出同时发送到监视器和日志文件。 command | tree filename
如希望向文件添加数据 -a选项
捕捉信号 保护该信号不被shell处理,并在本地处理它
trap commands signals
捕获脚本退出
trap commands EXIT
移除捕获
trap – EXIT
1、以命令行界面以后台模式运行shell脚本,在命令后加上一个&符号
如果终端退出,后台进程也会退出。
nohup命令运行另一个命令阻塞发送到进程的任何SIGHUP信号。防止在退出终端会话时退出进程。
nohup命令格式:nohup command &
因为nohup命令将进程和终端断开,所以进程没有STDOUT和STDERR输出链接。为接收命令生成的任何输出,nohup将STDOUT和STDERR消息重定向到nohup.out文件。
格式:nice –n 正整数 (不许普通用户增加优先级)
命令格式 at [-f filename] time
有26种不同的作业队列可用于不同的优先级水平,默认所有at作业都提交到作业队列a,即最高优先级队列,如希望以较低的优先级运行作业,可以使用-q参数指定字母。
输出STDOUT和STDERR通过邮件发送给用户。
列出排队的作业 atq
移除作业 atrm 作业号
检查Linux系统当前的平均负载水平,如果低于0.8,将运行任何在作业队列中等待的作业。
命令格式: batch –f filename time
让脚本在Linux一启动或用户启动新的bash shell会话时便自动运行。
shell在由于新用户登录而运行新的shell时运行.bash_profile
shell在每次启动新shell时运行.bashrc文件
函数是被赋予名称的脚本代码块。
① function name {
commands
}
② name() {
commands
}
在脚本中指定函数名即可。函数定义必须在使用之前。
以退出状态作为返回值。退出状态有三种生成方式。
funcname
在函数中使用local声明变量,外部变量不受影响。
向函数传递数组 不能将数组变量作为单个参数传递。如func $arrname
(解决方案:将数组变量拆分为单个元素,函数内部重组为数组变量)例如:
function testit {
local newarray
newarray=(echo “$@”
)
}
myarray=(1 2 3 4 5)
testit ${myarray[*]}
从函数返回数组(类似于向函数传递数组)
在命令行中创建函数
(存入环境变量中)使用unset删除 –f仅删除函数-v仅删除变量
将函数定义在一行命令中
使用多行命令定义函数
在.bashrc文件中定义函数
要控制显示格式,必须使用选择图形再现(SGR)转义码,格式SCIn[;k]m
使用echo将ANSI转义码发送到终端会话。CSI是一个两字符序列(ESC的ASCII值+左方括号字符)ESC的ASCII值通过Ctrl-V跟Esc键输入
dialog软件包
命令格式dialog –widget parameters(widget小部件名称,parameters窗口大小及文本)
选择OK或yes按钮,dialog返回0退出状态;选择Cancel或No按钮,dialog返回1退出状态;ESC退出,dialog返回255退出状态。
输出形式①使用STDERR(接收输入值);②使用退出代码状态(接收选项);
使用—title指定小部件的标题
dialog –msgbox text height width
dialog –yesno text height width
dialog –inputbox text height width
dialog –textbox filename height width
dialog –menu title height width itemcount(菜单项数) items(菜单项)
dialog –fselect dir(窗口使用的起始位置) height width
KDE环境
kdialog软件包(不是包含在终端模拟器对话中)结果发送到STDOUT
命令格式:kdialog display-options window-options(部件类型) arguments
GNOME环境
gdialog包和zenity包
参数在命令行上另起一行输入,而不作为选项参数。
sed编辑器,称为流编辑器。
命令格式:sed options script file
通过管道将数据传送给sed 例:echo “This is a test” | sed ‘s/test/big test/’
sed –e ‘s/brown/green/; s/dog/cat/’ data1
gawk程序
提供了一种编程语言而不仅仅是编辑器命令行。
gawk程序脚本由左大括号和右大括号定义
使用Ctrl-D结束gawk程序
0表示整行文本 1 表示文本行中第一个数据字段
$n 表示文本行中第n个数据字段
gawk默认字段分隔符是任意空白字符(如制表符和空格) -F指定字段分隔符,如-F:
多个命令之间用分号“;”分隔
-f script
gawk ‘BEGIN {commands}’
如果有正常处理脚本程序,使用另一脚本片段定义。例如gawk ‘BEGIN {command1} {commands}’
gawk ‘END {commands}’
sed编辑器扩展
s/pattern/replacement/flags
flags:
数字(新文本替换的模式)替换第几次出现的内容
g(一行全部替换)
p(打印原始行的内容) -n禁止sed编辑器的输出
w file(将输出保存到指定的文件中)
由于正斜杠/用作定界符,如果正斜杠出现在模式文本中必须使用反斜杠转义。
sed允许为替换命令中定界符选择一个不同的字符。如sed ‘s!/bin/bash!/bin/csh!’
如仅想将命令应用于某特定行,必须使用行寻址。
格式:[address]command 或
address{
command1
command2
}
数字式行寻址:①单行行号;(尾行$)②起始行号、逗号+结束行号
文本模式筛选器
格式:/pattern/command
sed ‘d
插入命令(i)在指定行之前添加新的一行
附加命令(a)在指定行之后添加新的一行
格式:sed ‘[address]command\ 如:
c命令
y命令 对单个字符进行操作。inchars和outchars一对一映射,如果inchars和outchars长度不同,sed生成错误消息。
① 打印行p,与-n搭配使用 sed –n ‘2,$p’
② 打印行号=命令 sed ‘=’
③ 列出行l(小写的L) 允许打印数据流中的文本和不可打印的ASCII字符
写文件w用于将文本行写入文件 格式:[address]w filename
例:sed –n ‘/IN/w INcustomers’ data10
从文件读取数据r (插入独立文件中的数据)不能使用地址范围
正则表达式引擎
POSIX基本正则表达式(BRE)引擎;
POSIX扩展正则表达式(ERE)引擎;
一、 特殊字符类
扩展正则表达式(ERE)
gawk能识别ERE,sed不能。
使用大括号——指定对可重复的正则表达式的限制。(必须指定—re-interval命令行选项)
管道符号(检查两个或多个模式)(将两边的内容各自作为整体,而非单字符)
(如果待搜索内容在末尾则存在问题,解决方案:将单行命令移到N命令前)
在使用N找到两行后只想删除第一行而非两行都删除
只打印模式空间的第一行
格式:[address]b [label]
标签在后面
标签在前面
不是基于地址跳转到标签,而是基于替换命令的结果跳转到标签。
格式:[address]t [label]
匹配替换成功后,测试命令跳过后续的替换命令。
用于表示替换命令中的匹配模式。无论什么文本匹配上定义的模式,都可以使用与号在替换模式中调用它。(批注:相当于正则中调用分组1、2)
圆括号定义替换模式中的子字符串元素,替换字符由反斜杠和数字组成。(圆括号必须转义)
sed ‘{
:start
$q
N
12,$D
b start
}’ filename
sed ‘{
:start
/^\n*$/{$d; N; b start }
}’
使用“=”赋值,输出时不带“$”符号。赋值可以在脚本中赋值,也可以在命令行中赋值。例:
(数学运算符^等同于**,求幂运算)
递归时使用for(key in array)
删除数组元素delete array[“index”]
例如:`gawk ‘BEGIN{FS=”,”} /11/{print $1}’ data1`
例如:`gawk ‘BEGIN{FS=”,”} $2 ~ /^data/{print $0}’ data1` 匹配出第二个字段以data开头字符串
例如 `gawk –F: ‘$4 == 0{print $1}’ /etc/passwd`
printf命令 printf “format string”,var1,var2……
tcsh shell使用命令行参数、默认文件、环境变量和内置命令来定义shell操作环境。
tcsh文件: 登录文件、shell启动文件、退出文件
登录文件 /etc/csh.login /etc/csh/login
启动文件 /etc/csh.cshrc $HOME/.cshrc $HOME/.tcshrc
退出文件 /etc/csh.logout $HOME/.logout
tcsh shell包含两种环境变量 shell变量、系统环境变量
ksh88和ksh93
ksh93包括 命令行参数、默认文件、环境变量、内置命令
默认文件 /etc/profile $HOME/.profile
shell启动文件 /etc/zshenv $HOME/.zshenv
登录文件 /etc/zlogin /etc/zprofile $HOME/.zlogin $HOME/.zprofile
交互式文件 /etc/zshrc $HOME/.zshrc
退出文件 /etc/zlogout $HOME/.zlogout
支持typeset命令,在变量使用前声明变量的属性
数值数组起始索引值为1。
声明关联数组 variable=( key1 value1 key2 value2 )
核心内置命令
添加模块
查看模块 zmodload不加任何命令行参数
载入模块 zmodload 模块名
删除模块 zmodload –u 模块名
执行计算 let命令; 双圆括号参数
数学函数
可以将函数放在单独文件中,zsh shell通过fpath环境变量查找函数,可将函数文件放在该路径下任意目录中。
zsh shell解析函数前,必须使用autoload命令,将函数载入内存 格式:autoload filename
发送命令:单条命令
多条命令
将输出赋值给变量
使用格式化标签
mysql dbname –u username –X –e ‘commond’
使用uptime和vmstat命令