SHELL第一课学习笔记

  1. 什么叫Shell

    shell是一个命令解释器,它在操作系统最外层,负责直接与用户对话,把用户输入的命令解释给

操作系统并处理各种各样的操作的输出结果,输出到屏幕返回用户(交互式或者非交互式)。


案例1.简单清除/var/log下的messages日志脚本:

#!bin/bash
cd /var/log
cat /dev/null > messages
echo "Logs cleaned up"

案例2.包含变量、命令、流程控制语句清除/var/log下的messages日志简单脚本

#!bin/bash
LOG_dir=/var/log
ROOT_uid=0
if [ $UID -ne $ROOT_uid ]
echo "You must be root to runing this csript"
 exit 1
fi
cd $LOG_dir || {
 echo "Cannot change  to necessary directory"  ##||前面命令不成功再实行中括号的命令
  exit 1       
}

cat /dev/null > messages && echo "Log cleaned up"   ##&& 前面命令成功才实行后面命令

exit 0

2.执行脚本有三种方式

a.bash script-name或sh script-name

b.path/script-name或./script-name(当前路径实行)

c.source script-name 或. script-name

第c种分法通常使用source或"."读入或者加载指定的shell脚本文件,然后执行指定shell脚本中的所有的语句。这些语句将作用当前父shell脚本进程一部分运行。因此,使用soucrce或者“.”点号可以将脚本自身脚本中的变量的值或函数等的返回值传递到当前的父shell脚本中使用。这是第三种方式最大的区别。

    source或“.”点号命令的功能是当前shell中执行source或“.”点号加载并执行的相关脚本文件中的命令及语句,而不是产生一个子shell来执行命令文件中的命令。

在PHP开发中include相当source或点号。

案例说明如下:

[root@localhost jiaoben]# cat >tesh.sh
echo "I am xiaoping"

^C
[root@localhost jiaoben]# sh tesh.sh
I am xiaoping
[root@localhost jiaoben]# .tesh.sh #点后面需要空格
-bash: .tesh.sh: command not found
[root@localhost jiaoben]# ./tesh.sh #没有执行权限
-bash: ./tesh.sh: Permission denied
[root@localhost jiaoben]# source tesh.sh
I am xiaoping
[root@localhost jiaoben]# chmod + tesh.sh
[root@localhost jiaoben]# chmod +x tesh.sh
[root@localhost jiaoben]# ./tesh.sh
I am xiaoping
[root@localhost jiaoben]# source tesh.sh
I am xiaoping
[root@localhost jiaoben]# ./
1.10.sh    break.sh   jiance.sh  prinf.sh   tesh.sh    zifu.sh
[root@localhost jiaoben]# ./
1.10.sh    break.sh   jiance.sh  prinf.sh   tesh.sh    zifu.sh
[root@localhost jiaoben]# echo 'userdir=`pwd`' >testsource.sh
[root@localhost jiaoben]# cat testsource.sh
userdir=`pwd`
[root@localhost jiaoben]# sh testsource.sh  #直接加载执行脚本
[root@localhost jiaoben]# echo $userdir  #并没有加载到文件的变量

[root@localhost jiaoben]# . testsource.sh
[root@localhost jiaoben]# echo $userdir ##没有变量后面没有``符号才直接输出
pwd
[root@localhost jiaoben]# cat testsource.sh
userdir=pwd
[root@localhost jiaoben]# pwd
/jiaoben
[root@localhost jiaoben]# vi sh
shengri.sh  shif.sh
[root@localhost jiaoben]# vi testsource.sh
[root@localhost jiaoben]# . testsource.sh  #直接加载执行脚本
[root@localhost jiaoben]# echo $userdir   #可以加载脚本的变量,输出屏幕
/jiaoben

#当前窗口是一个shell,而脚本testsource.sh又是另外一个shell,当使用sh testsource.sh执行是已经定义变量,是不会定义变量传递到当前窗口,也没有这个功能。用. testsource.sh可以使用定义变量传递到当前的shell,就可以输出屏幕来。如果想加载脚本中的变量应该是用.或者source.