菜鸟学Linux 第070篇笔记 array,trap,getopts,VNC



array


变量:内容空间,字符型



声名数组

declare -a AA


数组赋值方法

AA[0]=jerry

AA[1]=tom

AA[2]=windy 

AA[6]=natasha


AA=(jerry tom wendy natasha)

AA=([0]=jerry [1]=tom [2]=wendy [6]=natasha)



数组如何引用

echo ${AA[1]}   输出该数组第二个元素的值


echo ${#AA[0]} 输出该数组第一个元素值的字符长度


echo ${#AA[*]} 输出该数组一共包含多少元素(不包含元素值为空的元素)

echo ${#AA[@]} 输出该数组一共包含多少元素(不包含元素值为空的元素)





信号捕捉并且实现特殊处理 trap

(在脚本运行时,当用户为脚本输入某信号时,此命令捕捉到该信号并执行所定义的动作)

1 SIGHUP

2 SIGINT

9 SIGKILL

15 SIGTERM

18 SIGCONT

19 SIGSTOP


此为信号捕捉一个简单的脚本(当用户想中断该脚本时Ctrl+C trap就捕捉到该信号)

#!/bin/bash

#

function CLEAN() {

 rm -rf /var/tmp/test

 echo "Cleaning..."

}

trap 'CLEAN; exit 5' INT


mkdir -p /var/tmp/test

while true; do

 touch /var/tmp/test/file-`date +%F-%H-%M-%S`

 sleep 2

done




再学一个脚本参数

1. getopts 此命令可以为脚本后加选项,并且可以在选项后加参数的值

2. 脚本中getopts后引号所引起的为该脚本可接的选项

3. 引号中的第一个冒号可以去除getopts所提示的错误信息

4. 引号中最后的一个引号表示b选项后可以跟参数,如要给d也加参数则在d后加入:

5. 特殊变量 OPTARG 即可调用其后所跟的参数

6. 特殊变量 OPTIND 选项索引 可以将选项移动到最后一个选项

#vim ./opttest.sh

以下为脚本内容

#!/bin/bash

#

getopts ":db:" OPT

echo $OPT

echo $OPTARG

保存退出


执行该脚本时所产生的信息

# ./opttest.sh -b "123"

b

123


# ./opttest.sh -d

d


getopts:

OPTARG

OPTIND




为脚本生成首部信息

1. 先检测后部所跟的脚本名称是否为已存在文件

   如果文件存在并且文件里有内容则打开,(而不进行生成脚本首部)

2. 生成脚本首部信息

3. 让脚本后可接参数



#!/bin/bash

# name: mkscript

# description:

# version: 0.0.1

# author: Winthcloud

# data time: 01/04/2017 15:03:00

# Usage: mkscript FILENAME

while getopts ":d:" SWITCH; do

  case $SWITCH in

    d)

      DESC=$OPTARG ;;

    \?)

      echo "Usage: mkscript [-d DESCRIPTION ] FILENAME"

  esac

done


shift $[$OPTIND-1]


if ! grep "[^[:space:]]" $1 &> /dev/null; then

cat > $1 << EOF

#!/bin/bash

# name: `basename $1`

# description: $DESC

# version: 0.0.1

# author: Winthcloud

# data time: `date "+%F %T"`

# Usage: `basename $1`

#


EOF

fi


vim + $1


until bash -n $1 &> /dev/null; do

  read -p "Syntax error, q|Q for quiting, others for editing: " OPT

  case $OPT in

    q|Q)

      echo "Quit."

      exit 8 ;;

    *)

      vim + $1

  esac

done


chmod +x $1



将此脚本保存到/bin 然后加执行权限,以后再写脚本即可自动生成首部






写脚本 getinterface.sh 

1. 脚本可接受(i,I,a)选项,每个只可单独使用 [-i interface |-I IP|-a]

while getopts ":i:I:" SWITCH; do

  case $SWITCH in

    i)

      SHOWIP $OPTARG

      [ $? -eq 13 ] && echo "Wrong ethercard."

      ;;

    I)

      SHOWETHER $OPTARG

      [ $? -eq 14 ] && echo "Wrong IP."

      ;;

    *)

      USAGE ;;

  esac

done


2. 当用户使用-i选项时,显示其指定网卡的IP地址

# ifconfig eth0 | grep -o "inet addr:[0-9\.]\{1,\}" | cut -d: -f2

3. 当用户使用-I选项时,显示其后面的IP所属的网络接口

# ifconfig | grep -B 1 "192.168.11.122" | grep -o "^[^[:space:]]\{1,\}"

4. 当用户单独使用-a选项时,显示所有接口及其IP地址(lo除外)

# ifconfig | grep -A 1 "^eth" 








VNC (Virtual Network Console)  远程桌面

明文传送数据

远程登录Linux用户名为系统用户名,但是密码独立存放



远程连接Linux桌面

    1. Linux安装远程VNC软件 vnc-server

     # yum install vnc-server

     # rpm -qa vnc*

    2. 为要实现远程连接vnc-server的用户配置密码 

     为当前用户配置vnc密码

     # vncpasswd

    3. 启动vnc-server

     # vncserver &   (第一次启动时使用)

    4. 修改家vnc用户的家目录里的~/.vnc/xstartup

     # vim ~/.vnc/xstartup

     以下两行去#号

      # unset SESSION_MANAGER

      # exec /etc/X11/xinit/xinitrc

     最后一行twm & 改成

     gnome-session &

    5. 重新启动vnc-server

     # vncserver -kill :1 

     # vncserver -kill :#

     # vncserver &

     # chkconfig vncserver on

    

    此时客户端即可实现远程连接服务器端

    下载软件vnc viewer

    连接时记得IP后加:1 :2

    如192.168.11.122:1