1、/bin/sh是/bin/bash的一个连接
2、重定向
文件描述符0表示标准输入 符号为"<"或者"0<"
文件描述符1表示标准输出 符号为">"或者"1>"
文件描述符2表示标准错误输入 符号"2>"
">>"表示附加 将输入内容附加到一个文件
可以单独的重定向这些文件描述符,如 ps>temp.txt 将标准输入重定向输出到temp.txt文件
可以标准输出和标准错误输出到不同的文件,
如./startup.sh >"tomcatout.txt" 2>"tomcaterror.txt"
使用"2>&1"将标准输出和标准错误输出到同一个文件
如 ./startup.sh > "tomcat.txt" 2>&1
使用">/dev/null"直接丢弃不要的信息
3、管道
LINUX下通过管道连接的进程能够同时运行,并随着数据流在他们之前的传递自动的进行协调。
如果有一系列的命令需要执行,那么相应的输出文件将会在命令被创建的同时立刻被创建或者写入,因此一定不要再命令流中重复使用相同的文件。
如:cat temp | sort | >temp ,这样得到的只会是一个空文件,因为在命令被创建的时候,后一个temp文件已经覆盖了前一个temp文件的内容。
4、简单的几个正则规范
* 匹配一个字符串
?匹配一个字符
[set]匹配其中的一个字符
[^set]匹配除[]内字符之外的其他字符
{set}匹配{}内的任一个字符串
如: ls my{study,work}.txt 匹配mystudy.txt和mywork.txt
5、SHELL中#!表示以#!后面的参数来执行整个脚本内容 如#!/bin/bash,以/bin/bash来执行整个脚本
#号表示注释,#后面的内容将会被注释掉
exit 命令将会返回一个有意义的退出码,假如你希望从一个脚本接收另一个脚本的退出码,这将是一个很不错的选择 shell中 退出码0 表示成功
6、LINUX下shell脚本并没有什么特定的文件名后缀,要查看一个文件是否是shell脚本,简单的方法是file
如:#file test
test: Bourne-Again shell script text executable
#file /bin/bash
/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
7、如何设置脚本权限和可执行
chmod +x test 或者 chmod 711 test,1表示可执行
chown root test 设置文件用户 chgrp root test 设置文件用户组
chown root.root test 设置文件用户和用户组
8、shell变量不用声明,直接使用,使用$符号来引用变量内容,所有变量都会被当做字符串来存储
#temp="hello"
#echo $temp
hello
如果字符串中含有空格,则应该使用引号括起来
双引号内的变量会被直接转换为它的值,单引号内的变量不会扩展。
#echo "$temp,world"
hello,world
#echo '$temp,world'
$temp,world
9、一些常用的环境变量
$HOME 用户主目录
$PATH 用来搜索命令的目录列表
$PS1 命令提示符,通常是"$",但是在bash有更复杂的值,如[\u@\h\w]$
$PS2 二级提示符,通常是">"
$IFS 输入域分隔符,当shell读取输入时,用来分隔一组字符串,通常是空格、制表符、换行符
$0 脚本名称
$# 脚本参数个数
$$ 脚本进程号
$1,$2,…… 脚本参数
$* 脚本所有参数,输出以$IFS的第一个字符分隔
$@ 同$*,但是不使用变量IFS进行分隔,所以IFS为空时对其无影响
阅读(1853) | 评论(0) | 转发(1) |