1、主要的shell命令
who mv rm wc ls cat date at lpr rsh more awk
pwd bc vi finger w pg find cc cp dd grep ksh sh
ps sed cal lp
2、grep家族
含义就是:全局搜索正则表达式并打印该行!
grep的选项
-b 在各行之前放置它发现的块号。
-c 显示匹配行数而不是内容
-h 不显示文件名
-I 在座比较时忽略字母大小写
-n 文件中每行之前给出它的相关行号
-S 无声操作
-v 把搜索翻转为只显示不匹配的行
-W 把表达式当作一性来搜索。相当于用\<和\>括起来。
如果操作成功返回0 如果模式没找到状态是1
如果文件没找到状态是2
如果操作被取消则状态为130
示例:
grep '^[we]' picnic 其中的格式为grep 模式 对象
其中的模式为正则表达式的模式了!
ls -l | grep '^-' 还可以支持管道的方式进行匹配处理的。即前面的输出丢到后面去匹配输出来!
grep -c 'lover' picnic 还可以带上选择项。-c表示的是匹配的行数!
egrep 表示的是扩展的grep。 就是说这个东西能够支持更多的正则表达式的!
常用的操作集合
1、查看shell版本 echo $SHELL
2、将一个shell脚本设置成可执行的
chmod +x filename
方法二、shell 名+要执行的脚本
shell基本语法
输入输出重定向
> 和 <
>> 和 <<
command >file :将命令的输出结果重定向到一个文件
command>&file: 将命令的标准错误输出一起重定向到一个文件
command>>file: 将标准输出的结果追加到文件中
command>>&file: 将标准输出的结果,标准的错误输出的结果追加到文件中
shell的变量
环境变量
HOME 保存注册目录的完全路径名。
PATH 保存用冒号分隔的目录路径名。
TERM 终端的类型
UID 当前用户的标识符,取值是由数字构成的字符串
PWD 当前工作目录的绝对路径名
PS1 主提示符。缺省的主提示符是# 在普通用户下主提示符是$
PS2
预定义的变量
所有的预定义变量都由$符与另一个符号组成
$# 位置参数的数量
$* 所有位置参数的内容
$? 命令执行后返回的状态
$$ 当前进程的时程号
$! 后台运行的最后一个进程号
$0 当前执行的进程名
能够直接在shell里面输入echo $$
shell变量
用户定义的变量
变量名 = 变量值
declare[-afirx] 变量名 = 变量值
变量名前不加$号(PHP里面则是要的!)只有在引用的时候才需要加上!
abc= "abc" (要注意一下在shell里面的空格是非常忌讳的。如果有空格要千万小心呀!!!)
echo $abc
全部的预定义变量组成是$与另一个符号组成
比如说如下:
$#: 位置参数的数量
$*: 所有位置参数的内容
$? 命令执行后返回的状态
$$ 当前进程的进程号
$! 后台运行的最后一个进程号
$0 当前执行的进程名
建议所有的变量名都使用大写字母表示
变量的只读性:readly 变量名
整个shell使用变量
export 变量名 (相当于rpyc里面的export方法一样)
shell位置参数
$1 $2 $3
其中的$0是一个特殊的变量。它的内容是当前这个shell程序的文件名
参数置换的变量
方便用户根据不同的条件来给变量赋不同的值。
情况如下:
a. 变量=${参数-word} 如果设置了参数,则用参数的值置换变量的值。否则就用word置换
了
b. 变量=${参数=word} 如果设置了参数,则用参数的值置换变量的值。
否则把变量设置成word然后再用word替换参数的值。
c. 变量=${参数?word} 如果设置了参数。则用参数的值置换变量的值。否则就显示word并从shell中退出!
这种方式常用于出错指示的!
d. 变量=${参数+word} 如果设置了参数,则用word置换变量,否则不进行置换
shell特殊符号使用
shell使用两种引号和反斜线
双引号
这个与PHP一样的。如果使用了双引号的话就可以在里面使用变量了
param="hello$vari"
如果在变量的值里面有其他的变量值就只能使用双引号了!
反斜线
shell逻辑判断与运算
逻辑判断
1、文件与目录
-f 文件是否存在
-d 目录是否存在
-b 是否为block文件
-c 是否为character文件
-S 是否为socket文件
-L 是否为symbolic link文件
-e 是否存在!
2. 程序
-G 是否由GID所执行的程序所拥有
-O 是否由UID所执行的程序所拥有
3. 文件属性
-r 是否为可读属性
-W 是否为可写入属性
-x 是否为可执行的属性
-s 是否为非空白文件
-u 是否具有SUID的属性
-g 是否具有SGID的属性
4. 两个文件之间的对比
-nt 第一个文件比第二个文件新
-ot 第一个文件比第二个文件旧
-ef 第一个文件与第二个文件为同一文件
运算
= 等于
!= 不等于
< 小于
> 大于
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
-a 双方都成立(and)
-o 单方成立(or)
-z 空字符串
-n 非空字符串
逻辑判断与运算举例
if [-d $file] 原来那些上面的这个操作是这样处理的呀!
then
echo "$file is a direcotry"
elif [-f $file]
then
if [-r $file -a -w $file -a -x $file]
then
echo "you have r-w-x permission on $file"
fi
else
echo "$file is neither a file nor a directory"
fi
shell编程的流程控制
test测试命令
1》数值测试
-eq: 等于则为真
-ne: 不等于则为真
-gt: 大于则为真
-ge: 大于等于则为真
-lt: 小于则为真
-le: 小于等于则为真
2》字符串测试
=: 等于则为真
!=: 不等则为真
-z字符串:字符串长度伪则为真
-n字符串:字符串长度不伪则为真
3》文件测试
-e文件名:如果文件存在则为真
-r文件名:如果文件存在肯可读则为真
-w文件名:如果文件存在且可写则为真
-x文件名:如果文件存在且可执行为真
-s文件名:如果文件存在且至少有一个字符则为真
-d文件名:如果文件存在且为目录则为真
-f文件名:如果文件存在且为普通文件则为真
-c文件名:如果文件存在且为字符型特殊文件则为真
-b文件名:如果文件存在且为块特殊文件则为真
shell编程的流程控制
1》if 条件语句 条件语句判断格式!
所有的shell都支持if - then - else
fi 用于结束if语句
elif
格式:
if 测试条件
then
elif 测试条件
then
if
2》case条件语句
举例:
case $1 in
-i)
count='grep ^i$2|wc-l'
echo ""
-e)
count='grep ^e $2 | wc -l'
echo "dasf"
;;
*)
echo 'that is'
;;
esac
循环
for循环语句
对一个变量的可能的值都执行一个命令序列。赋给变量的几个数值既可以在程序内以数值列表的形式提供
也可以在程序以外位置参数的形式提供
举例:
for file
do
tr a-z A-Z < $file>$file.caps
done
while循环控制语句
举例:
count = 1
while[-n "$*"]
do
echo "this is parameter number $count$1"
shift
count='expr $count+1'
done
until循环控制语句
语法 与while语句非常相似的。在所提供的条件表达式为假时执行某代码块
其他的重复语句select和repeat
无条件控制 break与continue
shell函数
upper(){
shift
for I
do
tr a-z A-Z < $1 >$1.out
rm $1
mv $1.out $1
shift
done;
}
命令分组
()
{}
如果要真正使用这些的时候就可以使用\进行转义处理了!
信号捕捉
trap 命令用于在shell程序中捕捉到信号
之后可以有三种反应方式
shell的调试处理
几个常用的选择项是:
bash -选择项 shell程序文件名
几个常用的选择项为:
-e: 如果一个命令失败就立即退出
-n: 读入命令但是不执行它们
-u: 置换时把未设置的变量看作出错
-v: 当读入shell输入行时把它们显示出来
-x: 执行命令时把命令和它们的参数显示出来。
常用的内部命令
1 echo
echo arg 功能:在屏幕上打印由arg指定的字符串
2 eval
当shell执行到eval语句时,shell会读入args,并将它们组合成一个新的命令然后执行。
3 exec
exec 命令 命令参数
当shell执行到exec语句时 直接去执行指定的命令。
4 export
export 变量名或:export变量名=变量值
用export把它的变量向下带入子shell从而让子进程继承父进程中的环境变量。
但是子shell不能用export把它的变量向上带入父shell
5 readonly
命令格式:readonly 变量名
将一个用户定义的shell变量标识为不可变的。
6 read
命令格式:read 变量名表
从标准输入设备读入一行,分解成若干字 赋给shell程序内部定义的变量。
阅读(1324) | 评论(1) | 转发(0) |