讲述了shell的基础知识,好好了解一下吧。我都说累了。。哈哈
shell 编程
shell 基础
什么是shell ?
shell是一个命令行的解释器 kerne作用是l内存调度和资源调配
linux都支持什么shell
[root@xu /]# vim /etc/shells
bash的好处
内建命令比较多 兼容性比较好 支持的特性比较多
内建命令 是 系统自身带的
外建命令是 后来安装的
快捷键
history 之保存最新的1000条
!ser 调用之前用过的命令 文件在 ~/.bash_history
history -c 把当前终端上的历史命令清楚
history -w 把当前命令覆盖进文件里 要不然等重启以后才会保存进去
[root@xu /]# vim /etc/profile 系统级的环境变量
[root@xu /]# vim /etc/bashrc
cd /home/test/
ls -a
.bash_profile 用户级环境变量
.bashrc
这四个的顺序是
1 vim /etc/bashrc
2 vim /etc/profile
3 .bashrc
4 .bash_profile
修改 历史保存数量
[root@xu /]# vim /etc/profile
39 HISTSIZE=1000 修改
支持别名 配置文件
[root@xu test]# vim /root/.bashrc
; 代表 不管前面是否成功 后面都执行 顺序执行命令
&& 前面成功以后 后面才执行
|| 前面不成功 后面才会执行
` ` 优先执行 ` ` 里面的命令
2> 标准错误覆盖
2>>标准错误追加
&> 不管是正确错误都进去
--------------------------------------
shell 变量
变量 是 用固定的字符 存放变化的字符
变量类型 有
1 系统环境变量 2poi65z2qa
系统启动的时候自动生成的,我们不要修改
查看
[root@xu ~]# env 只能显示系统环境变量 自定义变量不能显示
[root@xu ~]# set 可以显示自定义变量
2 预定义变量
预定义变量 存放的值也 是固定不变的
[root@xu ~]# echo $# 位置变量的个数
[root@xu ~]# echo $* 位置变量的内容
[root@xu ~]# echo $$ 后台进程的pid号 是bash的后台进程的
[root@xu ~]# echo $? 上一条命令执行结果的状态 如果是0说明执行正确 非0执行错误
[root@xu ~]# echo $0 当前进程的名字 或脚本的名字
[root@xu ~]# echo $!
1 #!/bin/bash
2 #脚本的说明信息
3 echo $1 位置变量
4 echo $# 位置变量的个数
5 echo $* 内容
6 echo $0 名字
执行脚本方式
sh a.sh
bash a.sh
chmod +x a.sh
./a.sh
/root/a.sh
3 位置变量
$1.........$9 就是位置变量
自定义变量
a=1
根据需求定义自己的变量
注意
1 =两边不能有空格
2 区分大小写
3 在脚本里 变量名相同时 ,后定义的值生效
4 变量名 不能以数字开头
不能算的时候统统归为字符 在运算的时候会变成数值形
5 不要用特殊字符和关键字定义变量名
使用变量
echo $a
撤销变量
unset a
变量值的累加
[root@read ~]# xing=xu
[root@read ~]# ming=yang
[root@read ~]# name=$xing$ming
[root@read ~]# edcho $name
[root@read ~]# echo $name
xuyang
------------------------------------------
条件判断 (为流程控制作准备)
test 选项 目的对象
[ 选项 目的对象 ]
文件状态测试 (man test)
-e 文件是否存在 存在为真
-d 否不存在且是一个目录
-f 是不是一个文件
-r 可读的
-w 可写的
-x 可执行
0 代表真
1 代表假
数字比较
-eq 等于 =
-lt 小于 <
-gt 大于 >
-ne 不等于
-le 小于等于 <=
-ge 大于等于 >=
$? 查看结果
字符比较
= 赋予值
== 比较 左边的和右边的作比较
!= 不等于 空
-z 判断字符串是否为空
符号
" " 双引 里面的解释变量
' ' 单引 取消变量的含义
[root@read Server]# name=xu
[root@read Server]# echo "my is $name"
my is xu
[root@read Server]# echo 'my is $name'
my is $name
设置变量时间
[root@read Server]# date "+%F"
2013-03-03
[root@read Server]# daytime=`date "+%F"`
[root@read Server]# echo $daytime
2013-03-03
截取出 /的 一用容量
[root@read Server]# df -H
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 204G 54G 140G 28% /
/dev/sda1 104M 38M 61M 39% /boot
tmpfs 1.1G 0 1.1G 0% /dev/shm
/rhel5u.iso 3.6G 3.6G 0 100% /mnt
[root@read Server]# df -H | grep "/dev/sda2" | awk '{print $5}' | awk -F"%" '{print $1}'
[root@read Server]# rootdata=`df -H | grep "/dev/sda2" | awk '{print $5}' | awk -F"%" '{print $1}'`
[root@read Server]# echo $rootdata
28
[root@read Server]# [ $rootdata -gt 20 ] && mail -s "aaa" root@localhost < /etc/a.txt
输入名字的脚本
1 #!/bin/bash
等待输入的时间
read -t 15 -p “pleass your name” name
read -t 15 -p “pleass your name” age
[ -z $name ] && echo "name is null"
逻辑比较
两个或者两个以上的条件的时候会用到
&& -a
|| -o
! 取反
!-z 非空
[root@read Server]# [ 10 -eq 10 ] || [ 5 -gt 6 ]
[root@read Server]# echo $?
0
[root@read Server]# [ 10 -eq 10 -o 5 -gt 6 ]
[root@read Server]# echo $?
0
python 语言
安装包
rpm -ivh python-2.4.3-46.el5.i386.rpm
变量的范围
当前shell 当前shell的子shell都有用
自定全局变量
name=xu
export name=xu
脚本中的变量 只在脚本里有效
在外面没有用