您的位置:首页 > 运维架构 > Shell

shell基础-笔记

2010-05-08 18:23 204 查看
1、查看当前bash版本,bash –version,或者打印环境变量BASH_VERSON。

[root@localhost ~]# bash --version

GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)

Copyright (C) 2004 Free Software Foundation, Inc.

[root@localhost ~]# echo $BASH_VERSION

3.00.15(1)-release

2、系统启动后运行的第一个进程为init,进程标识符为1,其派生出一个getty进程,该进程负责打开终端端口。接下来就是执行提/bin/login程序。其功能是验证相关用户名、密码等和设计环境,然后启动一个shell给该用户。bash进程首先要查找系统文件/etc/profile,执行其中的命令,然后在用户目录中查找一个名为.bash_profile的初始化文件。执行完相关命令后,bash shell接着在用户的ENV文件,执行.bashrc中的命令。最后获得相关的提示符如$等,接受用户的输入命令。

3、如何改变当前的shell?当前我的shell为bash,我在命令行中直接键入csh,然后ps查看一下,就看到我有二个shell在运行了,当前运行的shell为csh。按exit可以退出,这就是最临时改变一下你使用的shell。

4、查看/etc/profile文件看它有什么功能。

[root@localhost xinbo]# cat /etc/profile

# /etc/profile

# System wide environment and startup programs, for login setup

# Functions and aliases go in /etc/bashrc

pathmunge () {

if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then

if [ "$2" = "after" ] ; then

PATH=$PATH:$1

else

PATH=$1:$PATH

fi

fi

}

# Path manipulation

if [ `id -u` = 0 ]; then

pathmunge /sbin

pathmunge /usr/sbin

pathmunge /usr/local/sbin

fi

pathmunge /usr/X11R6/bin after

# No core files by default

ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"

LOGNAME=$USER

MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`

HISTSIZE=1000

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then

INPUTRC=/etc/inputrc

fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

for i in /etc/profile.d/*.sh ; do

if [ -r "$i" ]; then

. $i

fi

done

unset i

unset pathmunge

从上面我们可以看出,其功能主要有给PATH变量赋值,shell将其指定的位置搜索命令;指定主提示符等一系统的功能。就这是为什么开始我们不同用户会显示不同的参数的原因。

4、再来看看目前用户的相关设置文件。~/.bash_profile,注意他是一个隐藏文件,我们要用ls –al 才能查看得到。如果在我们的主目录里面能找到它,那将被执行source命令。

[root@localhost xinbo]# cat ~/.bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

unset USERNAME

5、shell处理的是一些命令。而这些命令可以是:别名、关键字(if等)、函数、内置命令和可执行文件。其按以上类型顺序执行。通过type来查看相关命令类型。内置命令和函数是在shell中定义的,执行速度快。而像ls这样的脚本和可执行程序在存储在磁盘上的,shell为了运行它们得先搜索PATH的目录来查找它们,然后在shell中调用一个新的shell来执行脚本,因此相对而言较慢

[root@localhost xinbo]# type test

test is a shell builtin

[root@localhost xinbo]# type ls

ls is aliased to `ls --color=tty'

[root@localhost xinbo]# type pwd

pwd is a shell builtin

[root@localhost xinbo]# type clear

clear is /usr/bin/clear

6、有条件执行命令。&&和|| 如gcc –o test test.c && test这个意思就是如果我执行gcc –o test test.c如果成功,即其退出状态为0的时候,我们才会接下执行test命令,如果失败就不执行和C语言中的一样。对于||来说的话,与C中中一样的理解就OK了。

7、shell的元字符。

&:在后台处理的进程;

;:隔命令;

$:替换变量;

?:匹配单个字符;

*:匹配0个或者多个字符;

[abc]:匹配abc中的一个。

[!abc]:除abc以外的一个字符。

(cmds):在子shell中执行命令。

{cmds}:在当前shell中执行命令。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: