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