shell脚本命令

shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。
一些shell命令:

  	$ /bin/bash --version				查看bash的版本号
    $ /bin/sh *					  	 	执行一个脚本文件
    $ chmod +x *						设置一个脚本文件为可执行

重定向符:> >> 2> >&

$ ls -l > lsoutput.txt							把ls命令的输出保存到文件lsoutput.txt中
$ ps >> lsoutput.txt							把ps命令的输出附加到文件lsoutput.txt的尾部
$ kill -HUP 1234 >killout.txt 2> killerr.txt 	把kill命令的输出保存到文件killout.txt中,把kill命令的标准错误输出保存到文件killouterr.txt中
$ kill -HUP 1234 >killout.txt 2>&1				把kill命令的输出保存到文件killout.txt中,把kill命令的标准错误输出保存到同一文件

shell环境变量:

环境变量					说明
$HOME					当前用户的家目录 
$PATH					以冒号分隔的用来搜索命令的目录列表
$PS1					命令提示符,通常是$字符,但在bash中,可以使用一些更复杂的值。
$PS2					二级提示符,用来提示后续的输入,通常是>字符
$IFS					输入域分隔符。当shell读取输入时,它给出用来分隔单词的一组字符。通常是空格、制表符和换行符
$0						shell脚本的名字 
$#						传递给脚本的参数个数
$$						shell脚本的进程号。脚本程序通常使用它生成一个唯一的临时文件。

shell参数变量:

  参数变量			说明 
  $1,$2,...			脚本程序的参数
  $*				在一个变量中列出所有的参数,各个参数之间用环境变量IFS的第一个字符分隔开
  $@				$*一种精巧的变体,不使用IFS环境变量。

布尔判断命令:[或test

字符串比较			结果
string1=string2		字符串相同结果为真
string1!=string2	字符串不同结果为真
-n string			字符串不为空结果为真
-z string			字符串为空结果为真

算术比较							结果
expressionl -eq expression2		表达式相等结果为真
expressionl -ne expression2		表达式不等结果为真
expressionl -gt expression2		表达式1大于表达式2结果为真
expressionl -ge expression2		表达式1大于等于表达式2结果为真
expressionl -lt expression2		表达式1小于表达式2结果为真
expressionl -le expression2		表达式1小于等于表达式2结果为真
! expression					表达式为假结果为真

文件条件测试	结果
-d file			文件为一个目录结果为真
-e file			文件存在结果为真,通常不使用此命令,因为历史上-e选项不可移植
-f file			文件为普通文件结果为真
-g file			文件的set-group-id位被设置结果为真
-r file			文件可读结果为真
-s file			文件大小不为0结果为真
-u file			文件的set-user-id位被设置结果为真
-w file			文件可写结果为真
-x file 		文件可执行结果为真

if语句:

if conditon
then
	statements
else
	statements
fi

elif语句:

if	condition
then	
	statements
elif
	statements
else
	statements
fi

for语句:

for variable in values
do
	statements
done

for语句使用示例:

#!/bin/sh
for foo in bar fud 43
do
	echo $foo
done
exit(0)

输出:

bar
fud
43

while语句:

while condition 
do
	statements
done

until语句:

until condition		/* 循环将反复执行知道条件为真 */
do
	statements
done

case语句:

case variable in
	pattern [|pattern] ...) statements;;
	pattern [|pattern] ...) statements;;
	...
esac

shell脚本命令:

    break	 	跳出当前循环,也可以提供一个额外的数值参数表明需要跳出的循环层数。
    :		 	相当于true,但运行比true快
    continue	使for、while、until循环跳到下一次循环继续执行
    .			用于在当前shell执行命令
    echo		输出带有换行符的字符串。去掉换行符的方法:echo -n:echo -e "string\c"
    eval		对参数进行求值
    exec		将当前shell替换为一个不同的程序;修改当前文件描述符
    exit n		使脚本程序以退出码n结束运行;
    			在shell脚本中,退出码0代表成功,1~125代表错误。126代表文件不可执行.127代表命令未找到。128代表出现一个信号。
    export		export命令将作为它的参数的变量导出到子shell中,使之在子shell中有效。
    expr		expr命令将它的参数当作一个表达式来求值。但这个命令执行起来相当慢,一种更好的方法是使用$(())。		
    printf		输出,不支持浮点数,可打印字符、转义字符、字符转换限定符
 	return		使函数返回
	set			为shell设置参数变量
	shift		把所有参数变量左移一个位置,使$2变成$1,$3变成$2,$1的值被丢弃,$0仍保持不变
	trap		用于指定在接收到信号后将要采取的行动。比如在脚本程序被中断时完成清理工作。
				trap命令有两个参数,第一个是接收到信号采取的行动,第二个是参数名。
	unset		从环境中删除变量或函数,但并不能删除shell本身定义的只读变量

字符转换限定符:

	字符转换限定符		说明
	d					输出一个十进制数字
	c					输出一个字符
	s					输出一个字符串
	%					输出一个%字符

trap信号说明:

	信号		说明
	HUP(1)		挂起,通常因终端掉线或用户推出而引发
	INT(2)		中断,通常因按下Ctrl+C组合键而引发
	QUIT(3)		退出,通常因按下Ctrl+\组合键而引发
	ABRT(6)		中止,通常因某些严重的执行错误而引发
	ALRM(14)	报警,通常用来处理超时
	TERM(15)	终止,通常在系统关机时发送find命令	

find命令
完整语法:
find [path] [options] [tests] [actions]
options

选项			含义
-depth			在查看目录本身之前先搜索目录的内容
-follow			跟随符号链接
-maxdepths	N	最多搜索N层目录
-mount(或-xdev)	不搜索其他文件系统中的目录

tests

 测试				含义
    -atime N			文件在N天之前被最后访问过
    -mtime N			文件在N天之前被最后修改过
    -name  pattern		文件名匹配pattern。pattern需要用引号括起
    -newer otherfile	文件比otherfile文件要新
    -type  c/f/d		文件的类型为c,c是一个特殊类型。常见的是d(目录)和f(普通文件)。
    -user  username		文件的拥有者是指定的用户username

actions

动作				含义
-exec command		执行一条命令
-ok					与-exec类似,但在执行命令之前会针对每个文件提示用户进行确认
-printf				打印文件名
-ls					对当前文件使用命令ls-dils

grep(通用正则表达式解析器)命令:
grep语法结构如下:
grep [options] PATTERN [FILES] //如果没有提供文件名,则grep命令将搜索标准输入

选项			含义
-c				输出匹配行的数目,而不是输出匹配的行
-E				启用扩展表达式
-h				取消每个输出行的普通前缀,即匹配查询模式的文件名
-i				忽略大小写
-l				只列出包含匹配行的文件名,而不输出真正的匹配行
-v				对匹配模式取反,即搜索不匹配行

正则表达式:
在正则表达式中,一些字符是以特定方式处理的。

字符		含义
^			指向一行的开头
$			指向一行的结尾
.			任意单个字符
[]			方括号内包含一个字符范围,其中任何一个字符都可以被匹配。在字符范围前面加上^符号表示使用反向字符范围。

如果想将上述字符用作普通字符,需要在前面加上\字符。
在方括号中可以使用一些有用的特殊匹配模式:

匹配模式		含义
[:alnum:]		字母与数字字符
[:alpha:]		字母
[:ascii:]		ASCII字符
[:blank:]		空格或制表符
[:cntrl:]		ASCII控制字符
[:digit:]		数字
[:graph:]		非控制、非空格字符
[:lower:]		小写字母
[:print:]		可打印字符
[:punct:]		标点符号字符
[:space:]		空白字符,包括垂直制表符
[:upper:]		大写字母

如果使用了-E选项,在使用控制匹配完成的其他字符之前加上\字符

	选项		含义
	?			匹配是可选的,但最多匹配一次
	*			必须匹配0次或多次
	+			必须匹配1次或多次
	{n}			必须匹配n次
	{n,}		必须匹配n次或n次以上
	{n,m}		匹配次数在n到m之间,包括n和m

shell参数扩展方法:

	参数扩展				说明
	$(param:-default)	如果param为空,就把它设置为default的值
	$(#param)			给出param的长度
	$(param%word)		从param的尾部开始删除与word匹配的最小部分,返回剩余部分
	$(param%%word)		从param的尾部开始删除与word匹配的最长部分,返回剩余部分
	$(param#word)		从param的头部开始删除与word匹配的最小部分,返回剩余部分
	$(param##word)		从param的头部开始删除与word匹配的最长部分,返回剩余部分

shell调试:

命令行选项		set选项			说明
sh -n <script>	set -o noexec	只检查语法错误,不执行命令
				set -n
sh -v <script>	set -o verbose	在执行命令之前回显它们
				set -v
sh -x <script>	set -o xtrace	在处理命令之后回显它们
				set -x
sh -u <script>	set -o nounset	如果使用了未定义的变量,就给出出错信息
				set -u

CD数据库应用程序:
需求: 保存CD基本资料:唱片的名称、音乐类型、艺术家、作曲家的名字
能以每张唱片为单位搜索
能保存一些简单的唱片信息
能对唱片资料进行输入、更新、删除
设计: 把标题信息与曲目信息分开,用不同的文件保存它们
对每张CD唱片保存以下信息:
CD唱片的目录编号
标题
曲目类型
作曲家或艺术家
对曲目保存以下信息:
曲目编号
曲名
使用到的函数:

		get_return()
		get_confirm()
		set_menu_choice()
		insert_title()
		insert_track()
		add_record_tracks()
		add_records()
		find_cd()
		update_cd()
		count_cds()
		remove_records()
		list_tracks()		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值