.sh脚本语法

来源:互联网 发布:淘宝商城积分兑换 编辑:程序博客网 时间:2024/05/20 01:36

#!/bin/sh   程序必须以下面的行开始(必须放在文件的第一行):(------搞清楚这句话为什么这么写-------)

以#开头的句子表示注释,直到这一行的结束;

在shell编程中,所有的变量都是由字符串组成,并且不需要对变量声明。要赋值给一个变量,您可以这样写:

#!/bin/sh

#对变量赋值

a="hello world!"

#打印变量

echo "A is"

echo $a


常用命令语法及功能

echo "some text" 将文字内容打印在屏幕上

ls 文件列表

wc -l file , wc -w file , wc -c file 计算文件中的 行数,单词数 , 字符数

cp sourcefile desfile   文件拷贝

move oldname newname 重命名文件或者移动文件

rm file 删除文件

grep 'pattern' file 在文件内搜索字符串所在的行,比如: grep 'searchstring' file.txt (--------搞清楚如果这个字符跨行了怎么算的---------------)

cut -b colnum file   指定欲显示的文件的内容范围,并将它们输出到标准输出设备,比如,输出每行第5到第9个字符 cut -b5-9 file.txt。千万不要与cat命令混淆,这是两个完全不同的命令,cat file.txt ,输出文件内容到标准输出设备(屏幕)上

file somefile 得到文件类型

read var 提示用户输入,并将输入赋值给变量

sort file.txt  对文件中的行进行排序 (-------------不理解对行进行排序是什么意思,行需要排序么-------------)

uniq  删除文本文件中出现的行列 , 比如,sort file.txt | uniq (---------------------不理解,需要尝试-----------)

expr 进行数学运算,比如,add 2 and 3 expr 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是一个基本的查找替换程序,可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)


2) 概念: 管道, 重定向和 backtick
这些不是系统命令,但是他们真的很重要。
管道 (|) 将一个命令的输出作为另外一个命令的输入。
grep “hello” file.txt | wc -l
在file.txt中搜索包含有”hello”的行并计算其行数。
在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
> 写入文件并覆盖旧文件
>> 加到文件的尾部,保留旧文件内容。
反短斜线
使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
命令:
find . -mtime -1 -type f -print
用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下linux 脚本:
#!/bin/sh
# The ticks are backticks (`) not normal quotes (‘):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
3) 流程控制
1.if
“if” 表达式 如果条件为真则执行then后面的部分:
if ….; then
….
elif ….; then
….
else
….
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
通常用” [ ] “来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
执行man test可以查看所有测试表达式可以比较和判断的类型。
直接执行以下脚本:
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo “your login shell is the bash (bourne again shell)”
else
echo “your login shell is not bash but $SHELL”
fi
变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较。
快捷操作符
熟悉C语言的朋友可能会很喜欢下面的表达式:
[ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”
这里 && 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。
您也可以认为是逻辑运算中的与操作。上例中表示如果/etc/shadow文件存在则打印” This computer uses shadow passwors”。同样或操作(||)在shell编程中也是可用的。这里有个例子:
#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; }
echo “$mailfolder has mail from:”
grep “^From ” $mailfolder
该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的”From” 一行。如果不可读则或操作生效,打印错误信息后脚本退出。这里有个问题,那就是我们必须有两个命令:
◆打印错误信息
◆退出程序
我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。
不用与和或操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。

以上转自http://blog.sina.com.cn/s/blog_54f82cc201010hfz.html

http://jxcangel.blog.163.com/blog/static/4288510020103232348857/里面试各种符号的用法和含义,目前不懂




0 0