关于bash shell的相关整理与练习

    

  • 环境变量:能够在全部的用户进程中使用。登陆进程是父进程,shell进程是子进程。父进程初始化环境变量,子进程就均可以使用了。对应的声明文件是:/etc/profile  、~/wuxiangdong/.bash_profileshell

    变量的声明方式,export JAVA_HOME='/usr/local/jdk7'编程

  • 本地变量(局部变量) :做用域在一个shell,关闭终端,再开启一个,原来声明的变量不见了;变量设置为只读后不可废弃,不可修改。变量的声明方式:LOCALTEST=‘HELLO,BOY’echo$LOCALTEST。bash

  • 局部变量:做用域只对当前的代码段有效,local VARNAME=value。ide

  • 位置变量:$1,$2,$3,$4这样的变量,取参数的位置。测试

  • 特殊变量:spa

    $?上一个命令的状态返回值。命令行

    $#参数的个数orm

    $*参数列表继承

    $@参数列表进程

    $0命令自己 脚本自己

    程序状态返回代码(0-255) 0: 正确执行 1-255:错误执行,1,2,127系统预留;

注意:

  set命令结果是与shell类型有关。

    env查询的是当前用户全部的环境变量的状况。

    export 查询的是当前导出成用户变量的shell变量。     

撤销变量:unset    

变量名称:

一、只能包含字母、数字和下划线,而且不能数字开头;

二、不该该跟系统中已有的环境变量重名;

三、最好作到见名知义; 

变量声明格式:

  1. declare -i SUM=0

    integer

  2. -x(声明成环境变量)

  3. let A=0;(声明算术变量)

测试脚本是否有语法错误:

bash -n 脚本 检查是否是有错误

bash -x 脚本:单步执行

3.shell编程基础

    1)shebang:魔数

                               #!/bin/bash

                                #开头的是注释行,是不执行的。     

                                /dev/null :软件设备,bit bucket,数据黑洞。 

                        注意事项:

            脚本在执行时会启动一个子shell进程;

            命令行中启动的脚本会继承当前shell环境变量            

            系统自动执行的脚本(非命令行启动)就须要自我定义须要各环境变量;

 2)脚本的开始

 SHELL-1

  1 #有没有bash结尾的用户,有显示出来,没有显示没有

  2 #!/bin/bash

  3 #

  4 LINES=`grep "\<bash$" /etc/passwd | wc -l `

  5 USERS=`grep "\<bash$" /etc/passwd | cut -d: -f1`

  6 if [ $LINES -gt 0 ]; then 

  7    echo -n  "there are $USERS"

  8 else

  9    echo "no such user."

 10 fi

 11 

提示:“引用”一个命令的执行结果,要使用命令引用;好比: RESAULTS=`wc -l /etc/passwd | cut -d: -f1`;

      使用一个命令的执行状态结果,要直接执行此命令,必定不能引用;好比: if id user1一句中的id命令就必定不能加引号;

 若是想把一个命令的执行结果赋值给某变量,要使用命令引用,好比USERID=`id -u user1`;

      若是想把一个命令的执行状态结果保存下来,并做为命令执行成功与否的判断条件,则须要先执行此命令,然后引用其状态结果,如

id -u user1

RETVAL=$?

SHELL-2

给定一个文件,好比/etc/inittab

判断这个文件中是否有空白行;

若是有,则显示其空白行数;不然,显示没有空白行。

#!/bin/bash

LINES=`grep "^$" /etc/inittab|wc -l`

if [ $LINES -gt 0 ];then

        echo "$LINES"

else

        echo "NO Blank"

fi

SHELL-3

练习:写一个脚本

给定一个用户,判断其UID与GID是否同样

若是同样,就显示此用户为“good guy”;不然,就显示此用户为“bad guy”。

#!/bin/bash

USERNAME=user1

USERID=`id -u $USERNAME`

GROUPID=`id -g $USERNAME`

if [ $USERID -eq $GROUPID ]; then

  echo "Good guy."

else

  echo "Bad guy."

fi

若是不用id命令

#!/bin/bash

#

USERNAME=user1

if ! grep "^$USERNAME\>" /etc/passwd &> /dev/null; then

  echo "No such user: $USERNAME."

  exit 1

fi

USERID=`grep "^$USERNAME\>" /etc/passwd | cut -d: -f3`

GROUPID=`grep "^$USERNAME\>" /etc/passwd | cut -d: -f4`

if [ $USERID -eq $GROUPID ]; then

  echo "Good guy."

else

  echo "Bad guy."

fi

相关文章
相关标签/搜索