菜鸟学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