一,shell分类
1,图形用户界面shell:windows explorer,x windows manager等。
2,命令行shell:Bourne Shell(sh),C Shell(csh),Korn Shell(ksh).
二,shell是什么
shell是一种命令解析器,也是一个程序,一种命令语言和程序设计语言。
显示系统支持的shell
[root@zqmlinux ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
显示系统运行的shell
[root@zqmlinux ~]# echo $SHELL
/bin/bash
进入子shell
[root@zqmlinux ~]# /bin/ksh
#
推出子shell
# exit
[root@zqmlinux ~]#
-----------------------------------------------
[root@zqmlinux ~]# ls -lh
总计 68K
-rw------- 1 root root 1.1K 03-14 01:01 anaconda-ks.cfg
drwxr-xr-x 2 root root 4.0K 03-13 17:56 Desktop
第一列drwxr-xr-x:文件类型(第一位,d:目录;-:普通文件;l:连接文件,相当于windows下的快捷方式;b:块文件;c:字符文件;p:命令管道文件;s:socket文件),属主,同组,其他用户对文件的访问权限
第二列2:文件的硬链接数
第三列root:文件属主
第四列root:文件属主所属组
第五六列03-14 01:01:文件上次修改时间
第七列anaconda-ks.cfg:文件名
三,访问权限
chmod [who] operator [permission] filename
who(u,g,o,a)
operator(+,-,=)
permission(r,w,x,s,t)
如:chmod u=rwx,g+w,o+r
r - 4
w - 2
x - 1
chown [-R] owner myfile (-R 目录及子目录的拥有者都将改变)
chown owner.group myfile
chown .group myfile
chgrp [-R] group myfile
四,shell脚本
1,shell脚本第一行
#!/bin/bash
2,注释:#
3,例子:
$ cat hello.sh
#!/bin/bash
##test sh ##
printchar="hello world"
echo $printchar
4,shell的特性
a,别名;b,管道;c,命令替换;d,重定向;e,后台处理;f,模式匹配;g,变量;h,特殊字符
5,alias - 别名
a,设置别名:$ alias ll='ls -alh'
b,查看别名:
$ alias
alias cdapps='cd /data/webapps/fabu.duowan.com/'
alias ll='ls -alh'
alias ls='ls --color=auto'
c,别名设置,less $HOME/.bashrc
6,命令替换,使用反引号
$ ls `cat t1.dir` -alh
total 8.0K
drwxr-xr-x 2 zqm zqm 4.0K 2011-04-03 10:45 .
drwxr-xr-x 4 zqm zqm 4.0K 2011-04-03 17:23 ..
-rw-r--r-- 1 zqm zqm 0 2011-04-03 10:45 t1.txt
7,后台,使用&
$ nohup tar -czf t.tar.gz t1 &
jobs -l 查看后台任务
8,变量
定义:变量名=值
引用:$变量名
9,管道:一个命令的输出做为宁一个命令的输入
如:ls|sort
10,重定向:改变程序的输入来源或输出地点
$ vi test.txt
hi
fine
think you
ok
tha is all right
$ sort < test.txt
fine
hi
ok
tha is all right
think you
$ sort < test.txt > test.sort.txt
$ cat test.sort.txt
fine
hi
ok
tha is all right
think you
11,模式匹配,主要是正值表达式
12,特殊字符
五,shell变量
1,本地变量:在shell的生命周期内有效。readonly 变量名声明变量只读。查看只读变量:readonly。
2,环境变量:用于所用用户进程(也称子进程)。登陆进程称为父进程,shell中运行的用户进程称为子进程。用户环境变量编辑:$HOME/.bash_profile; 所用用户:/etc/profile
3,变量替换
4,变量清除:unset 变量名
5,位置变量:
6,标准变量
7,特殊变量:
参数个数:$#
脚本全部参数:$*
进程id:$$
前一个命令运行后状态:$?
8,影响变量的命令
shift:移动变量位置。
9,let 的作用
zqm@localhost:~/test$ zqmvar=65
zqm@localhost:~/test$ echo $zqmvar
65
zqm@localhost:~/test$ zqmvar+=5
zqm@localhost:~/test$ echo $zqmvar
655
zqm@localhost:~/test$ let zqmvar+=5
zqm@localhost:~/test$ echo $zqmvar
660