一、
echo "some text": 将文字内容打印在屏幕上
ls: 文件列表 -la 列出所有文件和文件夹 包括隐藏的
wc –l file wc -w file wc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数
cp sourcefile destfile: 文件拷贝
mv oldname newname : 重命名文件或移动文件
rm file: 删除文件
grep 'pattern' file: 在文件内搜索字符串 -n显示行数 -i不区分大小写
chmod [+ | - | =] [mode] 文件名 改资源权限
file somefile: 得到文件类型
find: 搜索文件比如:根据文件名搜索find . -name filename -print
dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin
tar:压缩、解压 eg: 压:tar -zcvf test.tar.gz test.sh 解到指定目录:tar -xzvf test.tar.gz -C /home/end
mkdir 创建目录 -p 一次性创建多层目录
二、
1.管道 | 将一个命令的输出作为另一个命令的输入:grep "hello" file.txt | wc -l 在file.txt中搜索包含有”hello”的行并计算其行数。
2.重定向 > 或 >> 将命令的结果输出到文件而不是标准输出。>覆盖旧文件 >>加到文件尾
3.反短斜线(普通键盘数字1前面的键) 将一个命令的输出作为另一个命令的参数。
eg:tar -zcvf test.tar.gz `find -name test.sh -print`
三、流程控制
1.if
<span style="font-size:18px;"><pre name="code" class="plain"><span style="font-size:18px;">if....; then ... elif....; then .... else .... fi</span></span>通常用[ ]表示条件,注意方括号中内容的前后要有空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
eg:
<span style="font-size:18px;"><span style="font-size:18px;">#!/bin/sh if [ `ls -la | wc -l` == "4" ]; then echo "yes 4" else a=`ls -la | wc -l` echo "$a" fi</span></span>
2.case eg: $1 表示传进来的第一个参数 脚本名为test.sh 使用:test.sh ***.tar.gz
<span style="font-size:18px;">#!/bin/sh type=`file "$1"` case "$type" in "$1: gzip"*) tar -xzvf "$1" -C /home/end;; "$1: Zip "*) unzip "$1";; *) echo "file can not been unzip";; esac</span>
3.select 用户可以从一组值中选择一个 eg:
<span style="font-size:18px;"><span style="font-size:18px;">#!/bin/sh echo "what is your favourite language?" select lan in "java" "c" "c++" "python" "Ruby"; do break done echo "you selected $lan"</span></span>
4.loop
(1)while loop
<span style="font-size:18px;">#!/bin/sh a=0 while [ "$a" -lt 5 ]; do echo "a is $a"; ((a=a+1)) done</span>
-lt less than 小于 -gt great than 大于 -ge great equal 大于等于 -le less equal 小于等于 -eq equal 等于 |
eg:
<span style="font-size:18px;">#!/bin/sh for a in 1 2 3 4 5; do echo "current is $a"; done</span>eg:
<span style="font-size:18px;">#!/bin/sh for a in $*; do echo "current is $a"; done</span>$*表示传进来的所有参数
5.引号
bash程序在参数传递之前,会扩展通配符和变量。比如 * 或 $SHELL 等。引号可以阻止这种扩展,且单引号比双引号更为严格。
6. Here documents
将多行文字传递给命令,以<<开头,和面接一个字符串 然后是想要的文字 最后以相同的开始字符串结尾
eg:
<span style="font-size:18px;">#!/bin/sh cat << !here! this is my sample bash program do you want to learn it? we can work together! !here!</span>
7.引入其他脚本
在脚本中引入其他脚本的内容有两张方式:
(1)source other.sh (2). other.sh "."和后面的脚本之间必须有个空格
eg:
child.sh
#!/bin/sh param="this is child"test.sh
#!/bin/sh param="this is test" echo "$param" . child.sh echo "$param"执行test.sh的结果是:
this is test
this is child