SHELL笔记
2016-06-03 20:05
357 查看
2016-05-30
1. Shell 参数
-
-
-
-
-
-
-
-
-
wc –l file wc -w file wc -c file
分别计算文件的行数(line) 、单词数(word)和字符数(character)
grep ‘pattern’ file
在文件内搜索字符串或和正则表达式匹配的字符串
cut -b column file
将指定范围内的文件内容输出到标准输出设备 (屏幕) 上。 比如: 输出5每至行9第个字符 cut -b5-9 file.txt, 注意不要和 cat 命令混淆,这是两个完全不同的命令
cat file.txt
输出文件内容到标准输出设备(屏幕)上
file somefile
取得文件 somefile 的文件类型
read var
read var 提示用户输入,并将输入内容赋值给变量var
sort file.txt
对 file.txt 文件所有行进行排序(显示在终端上,并不改变源文件)
uniq
只输出文件中内容不一致的行,如: sort file.txt | uniq
expr
进行数学运算,如要进行 2+3 的运算,命令为: expr 2 “+” 3
find
搜索文件,如根据文件名搜索:find . -name filename -print
tee
将数据输出到标准输出设备(屏幕)和文件,比如:somecommand|teeoutfile
firstname file
返回不包含路径的文件名,如: basename /bin/tux 会返回 tux
dirname file
返回文件所在路径,如:dirname /bin/tux 会返回 /bin
head file
打印文本文件开头几行
tail file
打印文件末尾几行
查找替换sed
是一个基本的查找替换程序。 可以从标准输入 (如命令管道) 读入文本, 并将结果输出到标准输出幕)(;屏 该命令采用正则表达式进行搜索。不要和 shell 中的通配符相混淆。比如将 ubuntu 替换为 Ubuntu :cat text.file | sed ‘s/ubuntu/Ubuntu/’ > newtext.file
awk
best awk document
awk
用来提取文本文件中的字段。 缺省的字段分割符是空格, 可以使用-F 指定其它分割符。
print与printf
awk中同时提供了print和printf两种打印输出的函数。
其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。
管道,重定向,backtick(`)
管道 (|) 将一个命令的输出作为另外一个命令的输入
重定向
将命令的结果输出到文件,而不是标准输出(屏幕)
‘>>’ 加到文件末尾
backtick(
tar -zcvf lastmod.tar.gz
流程控制
if
![](http://7xkyov.com1.z0.glb.clouddn.com/16-4-26/19123702.jpg)
大多数情况下,可以使用测试命令来对条件进行测试,比如可以比较字符串、判断文件是否存在及是否可 读等等……通常用” [ ] “来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。
[ -f “somefile” ] :判断是否是一个文件
[ -x “/bin/ls” ] :判断/bin/ls 是否存在并有可执行权限
[ -n “var"]:判断var 变量是否有值
[ “a"="b” ] :判断a和b 是否相等
通过
逻辑操作符
表示如果/etc/shadow 文件存在, 则打印”This computer uses shadow passwords”。
打印错误信息:
#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r “mailfolder"]||echo"Cannotread$mailfolder”;exit1;echo“mailfolder has mail from:”
grep “^From ” $mailfolder
该脚本首先判断 mailfolder 是否可读, 如果可读则打印该文件中的”From” 一行。 如果不可读则或操作生效,
打印错误信息后脚本退出。
case 语句
case 表达式可以用来匹配一个给定的字符串,而不是数字(可别和C 语言里的 switch…case 混淆) 。
格式
case…in
…)do something here;;
esac
例子:smartzip脚本
自动辨别出给定文件的类型,并自动解压
ftype=
case “ftype”in“1:Zip archive”*)
unzip “1”;;“1:gzip compressed”*)
gunzip “s1”;;“1: bzip2 compressed"*) bunzip2 "1”;;∗)error“File1 can not be uncompressed with smartzip”;;
esac
select语句
格式
select var in …; do
break;
done
… now $var can be use
例子
#!/bin/sh
echo “What is your favourite OS?”
select var in “Linux” “Gnu Hurd” “Free BSD” “Other”; do break
done
echo “Youhave selected $var”
结果
What is your favourite OS? 1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
while/for循环
格式
while…;do
…
done
1. Shell 参数
-
$0 Shell本身的文件名
-
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…
-
$$ Shell本身的PID(ProcessID)
-
$! Shell最后运行的后台Process的PID
-
$? 最后运行的命令的结束代码(返回值)
-
$- 使用Set命令设定的Flag一览
-
$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有数。
-
$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
-
$# 添加到Shell的参数个数
wc –l file wc -w file wc -c file
分别计算文件的行数(line) 、单词数(word)和字符数(character)
grep ‘pattern’ file
在文件内搜索字符串或和正则表达式匹配的字符串
cut -b column file
将指定范围内的文件内容输出到标准输出设备 (屏幕) 上。 比如: 输出5每至行9第个字符 cut -b5-9 file.txt, 注意不要和 cat 命令混淆,这是两个完全不同的命令
cat file.txt
输出文件内容到标准输出设备(屏幕)上
file somefile
取得文件 somefile 的文件类型
read var
read var 提示用户输入,并将输入内容赋值给变量var
sort file.txt
对 file.txt 文件所有行进行排序(显示在终端上,并不改变源文件)
uniq
只输出文件中内容不一致的行,如: sort file.txt | uniq
expr
进行数学运算,如要进行 2+3 的运算,命令为: expr 2 “+” 3
find
搜索文件,如根据文件名搜索:find . -name filename -print
tee
将数据输出到标准输出设备(屏幕)和文件,比如:somecommand|teeoutfile
firstname file
返回不包含路径的文件名,如: basename /bin/tux 会返回 tux
dirname file
返回文件所在路径,如:dirname /bin/tux 会返回 /bin
head file
打印文本文件开头几行
tail file
打印文件末尾几行
查找替换sed
是一个基本的查找替换程序。 可以从标准输入 (如命令管道) 读入文本, 并将结果输出到标准输出幕)(;屏 该命令采用正则表达式进行搜索。不要和 shell 中的通配符相混淆。比如将 ubuntu 替换为 Ubuntu :cat text.file | sed ‘s/ubuntu/Ubuntu/’ > newtext.file
awk
best awk document
awk
用来提取文本文件中的字段。 缺省的字段分割符是空格, 可以使用-F 指定其它分割符。
cat file.txt | awk -F, '{print $1 "," $3 }', 这里我们使用 , 作为字段分割符, 同时打印第一和第三个字段。 如果该文件内容Ad为am Bor, 34, IndiaKerry Miller, 22, USA,则上述命令的输出为:Adam Bor, IndiaKerry Miller, USA
print与printf
awk中同时提供了print和printf两种打印输出的函数。
其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。
awk -F ':' '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd
管道,重定向,backtick(`)
管道 (|) 将一个命令的输出作为另外一个命令的输入
grep "hello" file.txt | wc -l
重定向
将命令的结果输出到文件,而不是标准输出(屏幕)
>写入文件并复盖旧文件
‘>>’ 加到文件末尾
backtick(
) 反短斜线可以将一个命令的输出作为其它命令的命令行参数。 将过去24小时内修改过的文件打包 #!/bin/sh # The ticks are backticks () not normal quotes (‘):
tar -zcvf lastmod.tar.gz
find . -mtime -1 -type f -print
流程控制
if
![](http://7xkyov.com1.z0.glb.clouddn.com/16-4-26/19123702.jpg)
大多数情况下,可以使用测试命令来对条件进行测试,比如可以比较字符串、判断文件是否存在及是否可 读等等……通常用” [ ] “来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。
[ -f “somefile” ] :判断是否是一个文件
[ -x “/bin/ls” ] :判断/bin/ls 是否存在并有可执行权限
[ -n “var"]:判断var 变量是否有值
[ “a"="b” ] :判断a和b 是否相等
通过
man test查看所有测试表达式可以比较和判断的类型
逻辑操作符
&& ||
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwords"
表示如果/etc/shadow 文件存在, 则打印”This computer uses shadow passwords”。
打印错误信息:
#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r “mailfolder"]||echo"Cannotread$mailfolder”;exit1;echo“mailfolder has mail from:”
grep “^From ” $mailfolder
该脚本首先判断 mailfolder 是否可读, 如果可读则打印该文件中的”From” 一行。 如果不可读则或操作生效,
打印错误信息后脚本退出。
case 语句
case 表达式可以用来匹配一个给定的字符串,而不是数字(可别和C 语言里的 switch…case 混淆) 。
格式
case…in
…)do something here;;
esac
例子:smartzip脚本
自动辨别出给定文件的类型,并自动解压
ftype=
file "$1"
case “ftype”in“1:Zip archive”*)
unzip “1”;;“1:gzip compressed”*)
gunzip “s1”;;“1: bzip2 compressed"*) bunzip2 "1”;;∗)error“File1 can not be uncompressed with smartzip”;;
esac
select语句
格式
select var in …; do
break;
done
… now $var can be use
例子
#!/bin/sh
echo “What is your favourite OS?”
select var in “Linux” “Gnu Hurd” “Free BSD” “Other”; do break
done
echo “Youhave selected $var”
结果
What is your favourite OS? 1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
while/for循环
格式
while…;do
…
done
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享
- linux Shell学习笔记第五天