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

Linux下Shell编程(一)

2015-05-21 10:42 232 查看
=======(Shell 概念、特点、变量)=======

Shell就像一个壳层,这个壳层介于用户和操作系统之间,负责将用户的命令解释为操作系统可以接收的低级语言,并将操作系统响应的信息以用户可以了解的方式来显示

从用户登陆到注销期间,用户输入的每个命令都会经过解译及执行,其负责机制就是shell。

shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。

用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

Shell:没有一般编程语言的“编写-编译-链接-运行”过程,加快了开发、修改、测试和实施的速度,受到系统管理员和开发人员的青睐。

shell程序的特点及用途:

shell程序可以认为是将shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行。

不同的shell解释器使用不同的shell命令语法。

shell程序解释执行,不生成可以执行的二进制文件。

可以帮助用户完成特定的任务,提高使用、维护系统的效率。

了解shell程序可以更好的配置和使用Linux。

程序编译和运行过程

一般步骤:

编辑文件

保存文件

将文件赋予可以执行的权限chmod +x file.sh

运行及排错

常用到的命令:

Vi 编辑、保存文件

ls -l 查看文件权限

chmod 改变程序执行权限

直接键入文件名运行文件

Shell环境变量

显示变量值的命令:echo

用法:echo $variable

例如(在环境变量前加上$就代表使用该变量的值):

echo $PATH

echo $HOME

echo $MAIL

echo $USER

echo $HOSTNAME

查看所有Linux预定义变量的命令:env

Shell配置文件

/etc/profile 设置系统级的环境变量 PATH HOME HISTSIZE等。第一次登录时运行该脚本。

/etc/bashrc 第一次运行shell时运行该脚本。

~/.bash_profile 当用户登录时,该文件仅仅执行一次 。

~/.bashrc 新建shell时都会被执行。

~/.bash_hitory 放历史命令的地方。

~/.bash_logout 退出shell时执行。

Shell几点技巧

命令补全功能

指用户输入命令后,有时不需输入完整的命令,而系统会自动找出最符合的命令名称,这种功能可以节省输入长串命令的时间。

不需要输入完整的文件名,只需输入开头几个字母,然后按Tab键时候,系统会补充完整,连续按两次Tab(Esc)键系统会显示所有符合输入前缀的文件名称。

若忘了命令的全名,而只记得命令的开头字母,按Tab键一次会补充完整,连续按两次Tab(Esc)键系统会显示所有符合输入前缀的命令名称。

查阅历史记录

在Linux系统上输入命令并按下Enter后,这个命令就会存放在命令记录表 ( ~/.bash_history )中,预定的记录为1000笔,这些都定义在环境变量中。

列出所有的历史记录:#history

只列出最近5笔记录犯例:#history 5

使用命令记录号码执行命令:#!561

重复执行上一个命令:#!!

执行最后一次以ls开头的命令:#!ls

===================================================
例子:

显示当前的日期时间、执行路径、用户账号及所在的目录位置

vim shell.sh

<pre name="code" class="html" style="color: rgb(51, 51, 51);">#!/bin/bash
#This script is a test!echo -n "Date and time is :"dateecho -n "The executable path is :"$PATHecho "Your name is :`whoami`"echo -n "Your current directory is :"pwd#end

chmod +x shell.sh
./shell.sh 即可

Shell变量

与其他语言的区别:非类型性质,也就是不必指定变量是数字或字符串等。

可分为3种类型:

环境变量:系统提供,不用定义,可以修改

内部变量:系统提供,不用定义,不能修改

用户变量:用户定义,可以修改

------------

环境变量:

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等

常见的环境变量。

PATH:系统路径.

HOME:当前用户家目录

HISTSIZE:保存历史命令记录的条数。

LOGNAME:当前用户登录名。

HOSTNAME:主机名称,若应用程序要用到主机名的话,一般是从这个环境变量中的取得的.

SHELL:当前用户用的是哪种shell.

LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量.

MAIL:当前用户的邮件存放目录.

2.设置环境变量的方法。

echo:显示指定环境变量。

export:设置新的环境变量。

env:显示所有环境变量。

set:显示所有本地定义的shell变量。

unset:清除环境变量。

举例测试

[root@localhost ~]# echo $HOME /root
[root@localhost ~]# export NEW_ENV="just for shell test"
[root@localhost ~]# echo $NEW_ENV just for shell test
[root@localhost ~]# env
SSH_AGENT_PID=11223
HOSTNAME=localhost.localdomain
DESKTOP_STARTUP_ID= TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2
WINDOWID=14683882
OLDPWD=/root/src/opt/EmbedSky/linux-2.6.30.4
USER=root
......
MAIL=/var/spool/mail/root
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin:/sbin:/bin:/root/opt/EmbedSky/4.3.3/bin:/usr/bin:/usr/sbin:/bin:/sbin
INPUTRC=/etc/inputrc
PWD=/root
XMODIFIERS=@im=none
LANG=zh_CN.UTF-8
....
[root@localhost ~]# unset NEW_ENV
[root@localhost ~]# echo $NEW_ENV
[root@localhost ~]#


将一个路径加入到$PATH中,可以像下面这样做

1.修改profile文件:

$ vi /etc/profile

在里面加入:

export PATH="$PATH:/my_new_path"

2.修改.bashrc文件:

$ vi /root/.bashrc

在里面加入:

export PATH="$PATH:/my_new_path"

这两种方法一般需要重新注销系统才能生效,

或者立即生效source /etc/profile

也可以直接在终端里输入

export PATH="$PATH:/my_new_path"

最后可以通过echo命令测试一下:

$ echo $PATH

内部变量

内部变量是Linux所提供的一种特殊类型的变量,在shell程序内这类变量的值是不能修改的。

部分内部变量是:

$# : 传递到脚本的参数个数

$* : 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9个

$$ : 脚本运行的当前进程 ID号

$! : 后台运行的最后一个进程的进程 ID号

$@ : 与$#相同,但是使用时加引号,并在引号中返回每个参数

$- : 显示shell使用的当前选项,与 set命令功能相同

$? : 显示最后命令的退出状态。 0表示没有错误,其他任何值表明有错误。

echo $*
echo $@
echo $#
echo $?
echo $$
echo $0
echo $3


运行测试:

./shell.sh huzl 1 2 3

[root@localhost ~]# ./shell.sh huzl 1 2 3

welcome to start for shell language

huzl 1 2 3

huzl 1 2 3

4

0

15583

./shell.sh

2

program end

[root@localhost ~]#

用户变量

1、变量名

用户定义的变量是最普通的shell变量。变量名是以字母或下线符开头的字母、数字和下线符序列,并且大小写字母意义不同 。

在定义变量时,变量名前不应加符号$,在引用变量的内容时则应在变量名前加$;

在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字串都要用双引号括起来。

在编写Shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。

2、变量赋值

给变量赋值的过程也是声明一个变量的过程。

set 显示本地所有的变量

其一般形式是:

变量名=字符串/数字

例如:

_HUZL="123"

myname=HUZL

有时想在说明一个变量并对它设置为一个特定值后就不在改变它的值时,可以用下面的命令来保证一个变量的只读性:

readonly 变量名

例如
readonly _HUZL "123"

3、访问变量值

可以通过给变量名加上前缀$(美元符)来访问变量的值。

例如:如果要把myname的值分配给变量yourname,那么可以执行下面的命令:

yourname=$myname

4、变量清除

unset variable-name

例:

[root@localhost ~]$TESTVAR="Just a test"

[root@localhost ~]$echo ${TESTVAR}

Just a test

[root@localhost ~]$unset TESTVAR

[root@localhost ~]echo ${TESTVAR}

[root@localhost ~]$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: