shell概述
shell变量应用
条件测试及运算
脚本编写及运行
shell - 命令行的解释器
内核 - 资源分配和进程调动
[root@localhost ~]# cat /etc/shells 系统支持的shell
/bin/sh
/bin/bash默认shell
/sbin/nologin分交互式shell
/bin/tcsh
/bin/csh
/bin/ksh
bash兼容性好
ksh不支持快捷键,没有历史命令
[root@localhost ~]# csh切换到csh
默认记录的命令时1000条
[root@localhost ~]# vim /etc/profile历史命令条数
[root@localhost ~]# grep 1000 /etc/profile
HISTSIZE=1000
[root@localhost ~]# source /etc/profile执行脚本;不产生新的脚本进程
[root@localhost ~]# echo $HISTSIZE输出调用值
ls -a | grep "bash"
.bash_history存放历史命令
.bash_logout
.bash_profile
.bashrc
[root@localhost ~]# history -c删除历史命令
[root@localhost ~]# history -w存储命令(覆盖存)
[root@localhost ~]# vim /etc/bashrc永久系统级别
[root@localhost ~]# vim .bashrc用户级别
[root@localhost ~]# unalise xx删除别名
重定向输出 >覆盖输出
>>追加输出
<输入
<<
重定向错误输出
2>错误输出-覆盖
2>>错误输出-追加
[root@localhost ~]# cd /abdir 2> /tmp/err.txt
&>重定向错误和正确的信息
ping -c 3 1.1.1.1 > /dev/null黑洞设备
shell里的特殊符号:
;顺序执行命令(无论前边的命令成功与否都不影响后边命令执行)
[root@localhost ~]# cd /mds;ls
&&顺序执行命令“逻辑与”(前面输出成功,后面才输出)
[root@localhost ~]# ping -c 3 localhost && echo "ok"
||(前面命令执行失败,后面才执行;前面成功,后面不执行)
[root@localhost ~]# cd /mds || ls
``调用
[root@localhost ~]# echo date
date
[root@localhost ~]# echo `date`
2013年 09月 30日 星期一 11:31:30 CST
[root@localhost ~]# ps aux | wc -l
95
[root@localhost ~]# preunm=` ps aux | wc -l`
[root@localhost ~]# echo $preunm
96
[root@localhost ~]# e=`date +%F`
[root@localhost ~]# tar -cvf a-$e.tar a*.txt
[root@localhost ~]# tar -cvf a-`date +%F`.tar a*.txt
|管道(把前边命令的输出作为后边命令的输入)
[root@localhost ~]# ls -l | wc -l
shell变量的应用:
什么是变量-变化的数据
为什么我们要在程序里使用变量?
shell变量的类型
系统环境变量
预定义变量
位置变量
自定义变量
格式:(自定义)
变量名=变量的值(name=plj)
[root@localhost ~]# a=asd
[root@localhost ~]# echo $a
asd
变量名命名规则
1、使用数字、字母、下划线
2、不能以数字开头
3、区分大小写
4、变量名相同,最后一个生效
5、赋值等号(=)两边不要有空格
[root@localhost ~]# unset name 去效变量
[root@localhost ~]# env查看系统环境变量
[root@localhost ~]# set查看全部环境变量
[tom@localhost ~]$ PATH=/sbin:$PATH
系统级:
/etc/profile(1)
/etc/bashrc (4)
用户级:
~/.bash_profile(2)
~/.bashrc(3)
图形模式下用户打开一个终端读取的文件
~/.bash_profile
/etc/bashrc
输出变量时 ‘’与“”区别
‘’
“”
[root@localhost ~]# name=asd
[root@localhost ~]# echo 'you name:'$name
you name:asd
[root@localhost ~]# echo "you name:$name"
you name:asd
预定义变量()
$$当前终端运行的进程的pid
[root@localhost ~]# ps
PID TTY TIME CMD
4997 pts/0 00:00:00 bash
7085 pts/0 00:00:00 ps
You have new mail in /var/spool/mail/root
[root@localhost ~]# echo $$
4997
$?上一次执行返回的结果(0正确;非0执行失败)
[root@localhost ~]# service network restart
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0:
正在决定 eth0 的 IP 信息...完成。
[确定]
[root@localhost ~]# echo $?
0
$0当前终端运行的进程名或执行脚本的脚本名
[root@localhost ~]# /etc/init.d/sshd asd
用法:/etc/init.d/sshd {start|stop|restart|reload|condrestart|status}
$!当前终端后台运行的最后一个进程的pid号
$*保存脚本所有位置参数的值
$#保存脚本位置参数的个数
export:把变量设置为全局变量
[root@localhost shell]# vim 1.sh
[root@localhost shell]# cat 1.sh
#!/bin/bash
#this is script test.
#asd
pwd
ls
echo "script over!!"
[root@localhost shell]# bash sh
[root@localhost shell]# sh 1.sh 执行脚本
/shell
1.sh
script over!!
[root@localhost shell]# bash 1.sh执行脚本
/shell
1.sh
script over!!
位置变量
[root@localhost shell]# cat 1.sh
#!/bin/bash
#输出脚本的名字
#输出脚本位置参数的个数
#输出脚本位置参数的值
echo "当前运行的脚本是:$0"
echo "当前脚本的位置参数个数是$#个"
echo "当前脚本的位置参数的值如下:"
echo $*
[root@localhost shell]# bash 1.sh a s d f g h j
当前运行的脚本是:1.sh
当前脚本的位置参数个数是7个
当前脚本的位置参数的值如下:
a s d f g h j
变量的引用:
[root@localhost shell]# a=asd
[root@localhost shell]# b=asd
[root@localhost shell]# c=${a}q
[root@localhost shell]# echo $c
asdq
[root@localhost shell]# c=$a$b
[root@localhost shell]# echo $c
asdasd
读取从键盘中输入:
read 【-p 提示信息】变量名
-p提示信息
-t等待输入数据时间
-stty -echo终端输出不显示
[root@localhost shell]# cat 2.sh
#!/bin/bash
stty -echo
read -p "请输入姓名:" name
echo
read -t 10 -p "请输入年龄:" age
echo
echo $name > /tmp/1.txt
echo $age > /tmp/2.txt
stty echo
echo "输入的名字:" $name
echo "输入的年龄:" $age