随笔 - 104  文章 - 21 评论 - 5 阅读 - 26万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

最近公司不是很忙,因此空闲的时候多看了下关于shell的一些东西,因为在linux下进行开发测试的时候,知道些关于shell的东西对自己还是很有帮助的。

关于什么是shell,就是linux的一个壳,负责与用户的交互对话,然后将用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,将最终的结果返回给用户。

而shell脚本就是当命令或者是语句不在命令行执行,而是通过一个程序文件执行的时候,此程序就是一个shell脚本,shell程序很类似于DOS系统下的批处理程序(*.bat),

该用户可以在脚本中敲入一系列的命令或者是命令行语句,这些命令,变量和流程控制语句有机的结合起来,就形成了一个功能强大的shell脚本。

widnows下利用批处理程序bat开发的备份网站以及数据的脚本:

1 @echo off
2 set date=%date:~0,4%-%date:~5,2%-%date:~8,2%
3 mysqldump -uroot -p  -A -B >D:\bak\"%date%".sql
4 rar.exe a -k -r -s -ml D:\bak\"%date%".sql.rar D:\bak\"%date%".sql
5 del D:\bak\*.sql
6 
7 rar.exe a -k -r -s -ml D:\bak\"%date%"htdocs.rar D:\work\phpnow\htdocs

范例一:清除/var/log下的messages日志文件的简单命令脚本

复制代码
 1 ROOT_UID=0
 2 LOG_DIR = "/var/log/"
 3 #要使用root身份的用户来进行
 4 if [ "$UID" -ne "$ROOT_UID" ]
 5 then 
 6    echo "must be the root to run this script!"
 7    exit 1  
 8 fi 
 9 
10 cd $LOG_DIR || {
11     echo "cannot change to this dir!"
12     exit 1
13 }    
14 
15 cat /dev/null > ${LOG_DIR}/messages
16 
17 echo "logs clean up!"
复制代码

清空日志的三种方法:

1 echo " " >/var/log/a.log
2 >/var/log/a.log
3 cat /dev/null >/var/log/a.log

shell脚本擅长处理纯文本类型的数据,而linux中几乎所有的配置文件,日志文件都是纯文本文件。

shell脚本的执行:

 当shell脚本以非交互的方式运行时,他先会查找环境变量ENV,该变量指定了一个环境文件(.bashrc),然后从该环境变量文件开始执行,当读取了ENV文件之后,SHELL才开始执行shell脚本中的内容

 shell脚本的执行通常可以采用以下三种方式:

  (1).  bash script-name 或者sh script-name

  (2).  path/script-name 或者./script-name

    (3).  source script-name 或者 . script-name 

 三种方法执行说明:

先举个例子吧:

复制代码
1 [root@localhost python]# vim a.sh 
2 #!/usr/bin/bash
3 userdir=`pwd` 
4 
5 如果使用sh a.sh 执行完成后, echo $userdir是一个空值
6 但是使用 .   a.sh 执行完成后,echo $userdir是当前的目录
7 
8 
9 这就是上面两种方式的区别! 
复制代码

 shell的环境变量:

  环境变量用于定义shell的运行环境,保证shell命令的正确执行,shell通过环境变量来确定登陆的用户名,命令路径,终端类型,登陆目录等,所有的环境变量都是系统的全局变量,可用于所有的子进程中,这包括编辑器,shell脚本和各类应用。

  环境变量可以在命令行中设置,但用户退出的时候这些变量值也会丢失,因此最好在用户的家目录下的.bash_profile文件中或全局配置/etc/bashrc,/etc/profile中定义。

  传统上,所有环境变量均为大写。环境变量用于用户进程前,必须用export命令导出。

  有一些环境变量,比如HOME,PATH,SHELL,UID,USER 等,在用户登录前就已经被/bin/login程序设置好了。

  

  • 变量的配置守则
    1. 变量与变量内容以一个等号『=』来连结,如下所示: 
      『myname=zekai』

    2. 等号两边不能直接接空格符,如下所示为错误: 
      『myname = zekai』或『myname=zekaiTsai』

    3. 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误: 
      『2myname=zekai』

    4. 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但
      • 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
        『var="lang is $LANG"』则『echo $var』可得『lang is en_US』
      • 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
        『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
    5. 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;

    6. 在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的配置:
      『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』

    7. 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:
      『PATH="$PATH":/home/bin』

    8. 若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:
      『export PATH』

    9. 通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;

    10. 取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:
      『unset myname』
         

使用『 version=$(uname -r) 』来取代『 version=`uname -r` 』比较好,因为反单引号大家老是容易打错或看错! 所以现在都习惯使用 $( 命令 ) !

posted on   shangzekai  阅读(172)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示