shell数组⽬录遍寻循环输出
linux shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select 学习笔记
分类: linux2013-06-05 15:49 223⼈阅读 评论(0) 收藏 举报
Linux
SHELL编程⼀UNIX和Shell⼯具简介
什么是shell?
shell只是⼀个程序,它在系统中没有特权。因此,有多个不同风格shell共同存在原因——Bourne Shell,Korn Shell,C Shell。
在shell输⼊命令,先分析⽤户键⼊的每个命令,然后为执⾏程序作初始化。
Shell有⾃⼰的内部程序设计语⾔,这种语⾔是解释型的,shell⽤这种语⾔解释命令⾏的每⼀条语句,然后执⾏。
C等编译型语⾔,⼀般是先编译成可执⾏⽂件再执⾏。
1)正规表达式
. 匹配任意字符
ed files, ed 编辑命令
^contents 匹配⾏⾸符号
contents$ 匹配⽂件尾
[...] 匹配[]内的字符之⼀
配额0个或多个任意字符
{...}:x{...}匹配精确数⽬的字符串
...: 保存匹配的字符串
2)cut
cut -cN file
cut -dchar -fN file
char是分割符
N 从第1 个开始数的第N 个字节、字符或域
N- 从第N 个开始到所在⾏结束的所有字符、字节或域
N-M 从第N 个开始到第M 个之间(包括第M 个)的所有字符、字节或域
-M 从第1 个开始到第M 个之间(包括第M 个)的所有字符、字节或域
3)paste命令
paste file1 file2 file3 ,将三个⽂件的内容连接起来,直接在对应的每⼀⾏后连接⽽不是在第⼀个⽂件末尾连接
paste -d‘char’ file1,file2
-
d是可选参数,⽂件连接的时候的默认分隔符是制表符,我们可以⽤-d来设定我们想要的字符,其中char的单引号最好是有,没⼤部分情况也是⾏的。paste -d'char' -s file,-s告诉paste把同⼀个⽂件file的⾏⽤char连在⼀起
4)sed ⽤来编辑数据的程序,指的是流编辑器,与ed的区别是其不能⽤于交互
sed 's/char1/char2/d' file,将file⾥⾯的每⼀个char1替换成char2,只有s的话只会将每⾏的第⼀个char2替换,加上g会将所有的char2替换
sed -n '1,2p' file,选项-n表⽰没有显式要求的话不显⽰任意⼀⾏,显式指定⽤p命令来实现,该命令表⽰输出file的1-2⾏
sed -n '/char/p' file,显⽰包含单词char的⾏
sed ‘1,2d’file,删除file⽂件的1-2⾏
5)tr 过滤器tr⽤于转换来⾃标准输⼊的字符
tr from-chars to-chars,from-chars 和to-chars都是⼀个或多个字符,输⼊的任意在from-chars的字符转换成to-chars中的字符
tr a b < file, 将file中的a全部转成b
tr '[a-z]' '[A-Z]' < file, ⼩写都换成⼤写
tr -s ':' ' ' < file,假设有连续的多个:,假如没有-s,那么出来的结果将会是压缩成⼀个' '。
tr -d ':' < file ,删除输⼊流中的:
6)grep 可以搜索⼀个或多个⽂件中特定的字符串模式
grep char files
grep -v char file 显⽰不包含char的⾏
grep -l char * ,显⽰包含char的⽂件名
grep -n char file, 显⽰⾏号
7)sort 对输⼊⽂件的每⼀⾏排序,默认升序
-u 去掉重复⾏
-
r 降序排列
-o,输出重定向,跟>很像,区别在于-o可以重定向为同⼀个⽂件,⽽>不⾏
-n,按算术⽅法排序
8)uniq 查并消除连续重复⾏
uniq file1
uniq file1 file2
uniq file -d,输出连续重复的⾏
uniq file -c,输出每⾏出现的次数
⼀、基础知识
Shell提供⼀个到UNIX系统的接⼝,它收集⽤户输⼊并根据输⼊执⾏程序,并显⽰程序的输出。有时被叫做命令解释器。
1、命令:简单命令、复杂命令(带参数)、复合命令(分号隔开,如:who; ll)。
2、Shell类型:Bourne Shell(包括sh, ksh, bash)和C Shell(包括csh, tcsh)。
3、模式:交互式和⾮交互式。
交互式启动:$/bin/sh 退出:exit
⾮交互式启动:$/bin/sh filename
4、初始化⽂件 /etc/profile
使⽤的终端类型:TERM=vt100
定位命令列表:PATH=/bin:/usr/bin
定位命令帮助列表:MANPATH=/usr/man:/usr/share/man
5、执⾏ chmod a+x ./logins 例,内容为:
#!/bin/sh 位于第⼀⾏,⽽在其他⾏时#开头为注
who;ls;
6、⽂件操作:
ls –aF; cat filename; wc filename; cp -i source destination;
mv –i source destination; rm files;
7、⽬录操作:
pwd; cd directory; mkdir directory; cp - r source destination; mv source destination; rmdir; rm –r;
8、⽂件属性操作:
符号链(相当于快捷⽅式或别名)创建:ln –s source destination
管道
chmod expression files; (r,w,x,o; 4读,2写,1执⾏)
chown改变⼀个⽂件的所有权; chown options user:group files
chgrp options group files
9、进程
前台进程,后台进程。启动后台进程在命令后⾯添加&。
前移后:ctrl+z. 后移前:fg. 使后台进程持续运⾏:nohup
jobs(显⽰悬挂的及正在后台运⾏的进程) ps(正在运⾏的所有进程) kill
SHELL编程⼆
⼆、编程
1、变量
定义:name=value (使⽤带空格的值时加引号)
访问:$name
例:FRUIT=apple $echo $FRUIT(结果为apple) $echo FRUIT(结果为FRUIT)
Bourne Shell只⽀持标量,Korn Shell中⽀持数组。
数组创建: name[index]=value 数组访问:${name[index]}
只读变量:readonly name
删除变量:unset name
局部变量(只在当前SHELL实例中存在),环境变量(SHELL任何⼦进程都能使⽤),SHELL变量(正确运⾏所必需,如PWD,PATH,HOME等)。
导出环境变量:export name
2、替换
(1)⽂件名替换通配符:*(匹配0个或多个)、?(匹配1个存在的任何字符)、[characters]。
shell脚本返回执行结果匹配给出的字符,例ls test[0123456789].sql或ls test[0-9].sql 。匹配所有以字母或数字结尾的⽂件:ls *[a-z A-Z 0-9]。
否定⼀个集合:如列出所有除a开头的⽂件,ls [!a]*。
(2)变量替换:
${parameter:-word} 若parameter为空或未设置,则⽤word代替,parameter值不变
${parameter:=word} 若parameter为空或未设置,则parameter设为值word
${parameter:?message} 若parameter为空或未设置,则message作为标准错误打印
${parameter:+word} 若parameter设置了,则⽤word代替,parameter值不变
(3)命令和算术替换
例:DATE=’date’ UP=’date; uptime’
foo:$((5+3)/2)
3、引⽤:关掉⼀个字符的特殊意义。
三种⽅式:/(关掉某个),’(关掉全部),”(关掉部份)。
例:echo Hello /; world 输出 Hello ; world
echo ‘<125.**>;(update)’ 输出<125.**>;(update)
双引号未关掉:$⽤于参数替换,后引号 ’⽤于命令替换,”, /。
4、流控制
(1)if语法:if list1
then list2
elif list3
then list4
else list5
fi
其中elif和else可选。
例:#!/bin/sh
Fruit=apple
F=b
if $Fruit>$F;
then echo $Fruit
else echo $F
fi
使⽤test:test expression,可⽤⽂件测试、字符串⽐较、数字⽐较。
(2)case语法:case word in
pattern1) list1 ;;
Pattern2) list2 ;;
esac
其中;;类似于break。
例:#!/bin/sh
Fruit=apple
case “$Fruit” in
apple) echo “I like apple.” ;;
banana) echo “banana” ;;
esac
运⾏后输出I like apple.
条件可以运前之前学习的进⾏组合出复杂表达式。
5、循环
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论