首页 > 代码库 > 关于bash shell的相关整理与练习

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

    

  • 环境变量:可以在所有的用户进程中使用。登录进程是父进程,shell进程是子进程。父进程初始化环境变量,子进程就都可以使用了。对应的声明文件是:/etc/profile  、~/wuxiangdong/.bash_profile

    变量的声明方式,export JAVA_HOME=‘/usr/local/jdk7‘

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

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

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

  • 特殊变量:

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

    $#参数的个数

    $*参数列表

    $@参数列表

    $0命令本身 脚本本身

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

注意:

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

    env查询的是当前用户所有的环境变量的情况。

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

撤销变量:unset    

变量名称:

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

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

3、最好做到见名知义; 

变量声明格式:

  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

  


本文出自 “大鸟地带-点滴积累” 博客,谢绝转载!

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