一、为什么要实现shell编程
shell集合了大量命令,借助shell,大量任务可以实现自动化,提高效率。
二、脚本
1、代码:#!/bin/sh
符号#!用来告诉系统执行该脚本的程序。编辑完,如果要执行该脚本,还必须使其可执行:
chmod +x filename
这样输入:
./filename变可执行该脚本
2、变量
shell编程中的所有变量都由字符串组成,并且不需要声明,要给一个变量复制,你只需这么写:变量名=值(在变量名之前加一个$,就可以取出变量值
例1:
#!/bin/sh
#对变量赋值:
a=“lucas”
# 打印变量a的值:
echo “A is:” $a
例2:
用花括号告诉shell我们要打印num变量
num=2
echo “this is the ${num}nd”
输出结果:this is the 2nd
三、unix命令
1、在屏幕上输出信息:
echo “some text”
2、文件的计算
wc -l file 计算文件的行数
wc -w file 计算文件单词数
wc -c film 计算文件字符数
3、文件的拷贝:
cp sourcefile destfile
4、重命名文件或移动文件:
mv old name new name
5、删除文件:
rm file
6、在文件内搜索字符串或和正则表达式匹配的字符串:
grep ‘pattern’ file
7、将指定范围内的文件内容输出到标准输出设备(屏幕)上:
cut -b column file
例如:输出每行第5至9个字符
cut -b5-9 file.txt
8、输出文件内容到标准输出设备(屏幕)上:
cat file.txt
9、取得文件somefile的文件类型:
file somefile
10、提示用户输入,并将输入内容赋值给变量var:
read var
11、对file.txt文件所有行进行排序:
sort file.txt
12、uniq:只输出文件中内容不一致的行,如sort file.txt | uniq
13、expr:进行数学运算,如要进行2+3的运算,命令为:expr 2 “+” 3
14、find :搜索文件,如根据文件名搜索:find . -name filename -print
15、tree : 将数据输出到标准输出设备(屏幕)和文件,例如:somecommand | tree outfield
16、basename file:返回不含路径的文件名,如:basename /bin/tux 会返回tux
17、dirname file:返回文件所在路径,如:dirname /bin/tux 会返回/bin
18、head file:打印文本文件开头几行
19、tail file 打印文本文件末尾几行
四、管道,重定向和backtick
1、管道(|)将一个命令的输出作为另一个命令的输入
代码:
grep “hello” file.txt | wc -l
上述命令会在file.txt中搜索包含有“hello”的行并计算行数,这里grep命令的输出成了wc命令的输入
2、重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
代码:
>写入文件并覆盖旧文件
》加到文件的尾部,保留旧文件内容
3、反短斜线:使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数
代码:
find . -mtime -1 -type f -print
上述命令可以查找过去24小时(-mtime -2则表示过去48小时)内修改过的文件。如果你想将所有查找到的文件打一个包,则可以使用以下脚本:
代码:
#!/bin.sh
# The ticks are backticks(`) not normal quotes(`):
Tar -zcvf happy.tar.gz `find . -mtime -1 -type f -print`
五、流程控制
1、“if”表达式如果条件为真则执行then后的部分:
代码:
if ....; then
....
elif ....; then ....
else
.... fi
上述表达式经常可以比较字符串、判断文件是否存在及是否可读等等…通常用“[]”来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格
代码:
[ -f “somefile”] :判断是否一个文件
[-x “/bin/ls”]:判断/bin/ls是否存在并有可执行权限
[ -n “$var”]:判断$var变量是否有值
[“$a”=“$b”]:判断$a和$b是否相等
执行man test 可以查看所有测试表达式可以比较和判断的类型
2、case表达式可以用来匹配一个给定的字符串,而不是数字
代码:
case … in
…) do something here;;
esac
3、select表达式是一种bash的扩展应用,擅长交互式使用。用户可以从一组不同的值中进行选择。
代码:
select var in ... ; do
break
done
.... now $var can be used ....
例如:
你也可以在shell中使用如下的loop表达式:
while ...; do ....
done
while-loop 将运行直到表达式测试为真。will run while the expression that we test for is true. 关键字"break" 用来跳出循环。 而关键字”continue”用来不执行余下的部分而直接跳到下一个循环。
for-loop表达式查看一个字符串列表 (字符串用空格分隔) 然后将 其赋给一个变量:
for var in ....; do ....
done
六、单引号和双引号的区别
单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配 符扩展但允许变量扩展。
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'
运行结果为:
/bin/bash
/bin/bash
$SHELL
七、调试
最简单的调试命令当然是使用 echo 命令。您可以使用 echo 在任何怀 疑出错的地方打印任何变量值。这也是绝大多数的 shell 程序员要花费 80%的时间来调试程序的原因。Shell 程序的好处在于不需要重新编译, 插入一个 echo 命令也不需要多少时间。
shell也有一个真实的调试模式。如果在脚本"strangescript" 中有 错误,您可以这样来进行调试:
sh -x strangescript ,这将执行该脚本并显示所有变量的值。
shell 还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
sh -n your_script ,这将返回所有语法错误。
.
标签:bin,文件,shell,....,编程,基础,echo,file From: https://blog.51cto.com/u_15834920/5767629