为何使用shell python
能够快速、简单的完成编程,实现本身的想法。Shell很是适合编写小的工具,由于小工具更强调的是易于配置、维护、移植等,而不是执行效率。 shell
当本身的想法确实有必要进行优化,有必要让它更容易修改以及修正设计目的时,能够将shell编写的工具从新用C、C++/python等语言从新实现。编程
常见的shell有bash/csh/sh等bash
管道和重定向 函数
ls -al > lsoutput.txt #将ls命令输出的内容重定向到txt文件 在>前加数字 0 1 2 分别表明输入、标准输出、错误输出 工具
参数2能够将错误输出到文件 而标准输出的内容将显示在屏幕上 测试
>> #将输出添加到文件 优化
丢弃不须要保存的输出的方法 spa
Kill -l 1234 >/dev/null 2>&1 #将标准输出与错误输出都丢弃到系统垃圾箱 设计
| 管道 用来链接进程 经过管道链接的进程能够同时运行,并自动协调数据流
1 Ps > psout.txt #输出ps内容到psout.txt 2 Sort psout.txt > psout.out #对psout.txt内容进行排序 输出到psout.out中
管道写法
1 Ps | sort | pssort.out #将ps内容排序后输出
自动搜索文件夹下 全部文件中包含的 某字符串
More $(grep -l POSIX *) #在当前文件夹下的文件中 搜索POSIX字符串 打印出包含字符串的文件名
建立脚本
1.在脚本第一行添加 #!/bin/sh
2.把脚本设置为可执行 chmod +x 脚本文件名
3.设定脚本的权限
shell语法
1.变量 不须要提早申明,变量被用到时会自动建立,全部变量被看作字符串来存储 获取变量内容用$字符,
若字符串里包含空格,则须要使用括号将字符串括起来,此外,等号两边不能有空格
$() 或 $"" 用变量的值替换此处的内容 注意 $''不发生替换
2.环境变量&参数变量
$0 当前脚本的文件名
$n 传递给脚本的参数n,好比$1表示第一个参数
$# 传递给脚本或函数的参数个数。
$*,$@ 传递给脚本或函数的全部参数
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell脚本所在的进程ID
$HOME 当前用户家目录
$PS1 给出当前用户名、机器名和当前目录名
$* 在一个变量中列出全部参数 参数间用IFS中第一个字符分隔开
$@ $*的变体 列出全部参数 与IFS无关 参数之间用空格分开
3.条件
test & [ 命令:shell布尔判断命令
检查一个文件是否存在
1 if test -f fred.c 2 then 3 … 4 fi 5 #或者 6 if [ -f fred.c ] 7 then 8 … 9 Fi
4.控制结构
条件判断
1 if condition 2 then 3 statements 4 else if condition; then 5 statements 6 else 7 statements 8 fi
循环语句
1 for variable in values 2 do 3 statements 4 5 done 6 exit 0 7 8 9 while condition; do 10 statements 11 12 done 13 14 15 until condition 16 do 17 statements 18 19 done 20 21 #until与while的条件测试相反 22 23 case variable in 24 pattern [ | pattern] …) statements;; 25 pattern [ | pattern] …) statements;; 26 … 27 esac
命令列表
执行一系列命令,只有在前边全部命令都执行成功的状况下才执行后一条命令
statement1 && statement2 && statement3 && …
&&的做用是检查上一条语句的返回值
AND列表是一系列命令做为一个总体,全部命令都执行,AND才算执行成功
执行一系列命令直到一条命令成功为止
函数
function_name (){
statements
}
函数定义须要放到调用以前
当一个函数被调用时,脚本程序的位置参数($*/$@/$#/$1/$2等)都会被替换为函数的参数,当函数执行完,这些参数将会恢复他们以前的值