shell 脚本学习

来源:互联网 发布:手机直播网络要求 编辑:程序博客网 时间:2024/06/09 18:34
1.shell 命令中没有参数的选项可以合并
2.shell 字符串有空格时,使用双引号
3.set -x 跟踪命令执行,set +x关闭跟踪命令
4.变量名都是字符串,引用变量方式为$+变量名,变量名与其它名字混淆需要用{}包起来
num=2 
echo "this is the ${num}nd" 
5.backtick(反斜杠)后一个命令的输出为前一个命令的参数
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
6.【】用于测试条件
[ -f "somefile" ] :判断是否是一个文件 
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限 
[ -n "$var" ] :判断$var变量是否有值 
[ "$a" = "$b" ] :判断$a和$b是否相等 ,注意“=”和变量之间要有空格
7.select为Shell的扩展使用方式,用于交互式的使用
#!/bin/sh 
echo "What is your favourite OS?" 
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do 
break 
done 
echo "You have selected $var" 
下面是该脚本运行的结果: 
What is your favourite OS? 
1) Linux 
2) Gnu Hurd 
3) Free BSD 
4) Other 
#? 1 
You have selected Linux
8.双引号可以防止通配符的扩展,单引号不但可以防止通配符的扩展,还可以防止变量的扩展
echo $SHELL 
echo "$SHELL" 
echo '$SHELL'
输出结果为:
/bin/bash 
/bin/bash 
$SHELL 
9.以{}括起来的shell命令,可以当成是匿名函数
{echo “help”;  print "help" }

10.Shell也有一个真实的调试模式。如果在脚本中有错误,您可以这样来进行调试: 
sh -x test.sh
这将执行该脚本并显示所有变量的值。 
shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用: 
sh -n test,sh
11. Shell基本命令
在shell脚本中可以使用任意的unix/linux命令,但是还是由一些相对更常用的命令。这些命令通常是用来
进行文件和文字操作的。
常用命令语法及功能 
echo "some text": 将文字内容打印在屏幕上 
ls: 文件列表 
wc –l filewc-w filewc-c file: 计算文件行数;计算文件中的单词数;计算文件中的字符数 
cp sourcefile destfile: 文件拷贝 
mv oldname newname : 重命名文件或移动文件 
rm file: 删除文件 
grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt 
cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出
每行第5个到第9个字符cut -b5-9 file.txt
cat file.txt: 输出文件内容到标准输出设备(屏幕)上 
file somefile: 得到文件类型 
read var: 提示用户输入,并将输入赋值给变量 
sort file.txt: 对file.txt文件中的行进行排序 
uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq 
expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3 
find: 搜索文件比如:根据文件名搜索find . -name filename -print 
tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile 
basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux 
dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin 
head file: 打印文本文件开头几行 
tail file : 打印文本文件末尾几行 
sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将
结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。 
不要和shell中的通配符相混淆。比如:将linuxfocus 替换为 
LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file 


tee:通过tee传送管道命令(例如 someprog | tee logfile)让你复制那个命令的输出到文件,并同时在终端输出
which:如果你在终端运行一个程序foo.exe,你想要知道该程序在什么位置,只需要输入which foo.exe
0 0