a=`for i in $(cat list.txt); do echo -e ":$i\c" ; done`;a=${a#*:};echo $a
(补充:这里以将 list.txt 文件里的一列变成一行并以冒号分隔)
a=`for i in $(cat list.txt); do echo -e ":$i\c" ; done`;a=${a#*:};echo $a
(补充:这里以将 list.txt 文件里的一列变成一行并以冒号分隔)
# <array_name>=(<value0> <value1> <value2> <value3> <value4>)
或者:
# <array_name>=(\
<value0>\
<value1>\
<value2>\
<value3>\
<value4>\
)
<array_name>=(
<value0>
<value1>
<value2>
<value3>
<value4>
)
或者:
<array_name>[0]=<value0>
<array_name>[1]=<value1>
<array_name>[2]=<value2>
<array_name>[3]=<value3>
<array_name>[4]=<value4>
# <array_name>[0]=<value0>
(补充:这里以定义数组第 1 个元素位置的值为例)
<array_name>[0]=<value0>
(补充:这里以定义数组第 1 个元素位置的值为例)
# <array_name>+=(<the value of the new element> <the value of the new element> <the value of the new element> ......)
或者:
# <array_name>+=('<the value of the new element>' '<the value of the new element>' '<the value of the new element>' ......)
(补充:这里每个空格间隔 1 个新的元素,元素的位置依次递增)
# echo ${<array_name>[*]}
或者:
# echo ${<array_name>[@]}
# echo ${#<array_name>[*]}
或者:
# echo ${#<array_name>[@]}
# echo ${#<array_name>[n]}
# echo ${<array_name>[1]}
(补充:这里以显示数组第 2 个元素的值为例)
# echo ${command_array[2 + 1]}
(补充:这里以显示数组第 2 + 1 = 3 个,也就是第 3 个元素的值为例)
# echo ${command_array[(2 * $i) + 1]}
(补充:这里以显示数组第 2 乘以变量 i 的值再加上 1 的位置的元素的值为例)
# echo "First Index: ${<array_name>[0]}"
(补充:这里以显示数组第 1 个元素的值,并在前面加上 First Index: 前缀为例)
# vim test.sh
创建以下内容:
#!/bin/bash
NAME[0]='a1'
NAME[1]='b2'
NAME[2]='c3'
NAME[3]='d4'
NAME[4]='e5'
echo "first one: ${NAME[0]}"
echo "${NAME[*]}"
(补充:这里以创建名为 test.sh 显示数组的第 1 个值和所有值,并在第 1 个值前面添加 first one 前缀的脚本为例)
# . test.sh
first one: a1
all: a1 b2 c3 d4 e5
(补充:这里以执行名为 test.sh 的脚本,显示第 1 行是 first one: a1 第 2 行是 all: a1 b2 c3 d4 e5 的结果为例)
作者:朱明宇
名称:批量修改多个远程服务器某个用户的密码
作用:批量修改多个远程服务器某个用户的密码
1. 将此脚本和清单 $list 文件放在同一目录下
2. 清单 $list 里每服务器名占用 1 行
3. 给脚本分割线里的变量赋值
4. 给此脚本添加执行权限
5. 执行此脚本
1. list=”list.txt” #指定清单的目录和名称
2. user=eternalcenter #指定要修改密码的用户
3. password=eternalcenter #指定要修改的密码
此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器,并且可以通过 sudo 获得 su 的 root 权限
#!/bin/bash
####################### Separator ########################
list="list.txt"
user=eternalcenter
password=eternalcenter
####################### Separator ########################
num=1
cat $list
for i in `cat $list`
do
echo $num
echo $i
ssh -t $i "type lsb_release" &> /dev/null
if [ $? -ne 0 ]; then
distribution=`ssh -t $i "cat /etc/*release | grep '^NAME'"`
if [ $? -ne 0 ];then
distribution=`ssh -t $i "cat /etc/*release"`
fi
else
distribution=`ssh -t $i "lsb_release -i | grep 'ID' | grep -v 'n/a'"`
fi;
echo $distribution
case $distribution in
*"RedHat"* | *"Red Hat"*)
ssh -t $i "sudo -u root su - root -c \"echo $password | passwd --stdin $user\""
if [ $? -eq 0 ];then
echo -e "\033[32m$i is success\033[0m"
else
echo -e "\033[31m$i is fail\033[0m"
fi
;;
*"CentOS"*)
ssh -t $i "sudo -u root su - root -c \"echo $password | passwd --stdin $user\""
if [ $? -eq 0 ];then
echo -e "\033[32m$i is success\033[0m"
else
echo -e "\033[31m$i is fail\033[0m"
fi
;;
*"SUSE"* | *"SLES"*)
ssh -t $i "sudo -u root su - root -c \"echo $user:$password | chpasswd\""
if [ $? -eq 0 ];then
echo -e "\033[32m$i is success\033[0m"
else
echo -e "\033[31m$i is fail\033[0m"
fi
;;
*"openSUSE"*)
ssh -t $i "sudo -u root su - root -c \"echo $user:$password | chpasswd\""
if [ $? -eq 0 ];then
echo -e "\033[32m$i is success\033[0m"
else
echo -e "\033[31m$i is fail\033[0m"
fi
;;
*)
echo -e "\033[31m$i is fail \033[0m"
;;
esac
let num++
echo
done
作者:朱明宇
名称:实时监控内存
作用:实时监控内存,并每 3 秒钟更新 1 次状态信息
1. 给此脚本添加执行权限
2. 执行此脚本
#!/bin/bash
while true
do
sleep 10
free -m | head -1
free -g | grep Mem
done
1) -n 输出不换行
2) -e 处理某些特殊字符
\a 蜂鸣声报警
\b 删除前面一个字符
\c 在末尾不换行
\e 输出 esc
\f 换行,同时光标停在原处
\n 换行
\r 不换行,同时光标停在原处
\t tab,水平方向
\v tab,垂直方向
\ 输出 \
\Onnn 输出八进制 ASCII 字符
\xHH 输出十六进制 ASCII 字符
3) -E 不再转义
1) \033[0m 将所有显示属性关闭
2) \033[1m 高亮
3) \033[4m 下划线
4) \033[5m 闪烁
5) \033[7m 反显
6) \033[8m 消隐
7) \033[37m — \33[0m 设置字体颜色,这里以将字体颜色设置为白色为例
8) \033[40m — \33[0m 设置背景颜色,这里以将背景颜色设置为白色为例
9) \033[A 将光标向上移 n 行
10) \033[B 将光标向下移 n 行
11) \033[C 将光标向右移 n 行
12) \033[D 将光标向左移 n 行
13) \033[;H 将光标跳转到 x 和 y 位置
14) \033[2J 清屏
15) \033[K 将光标所在位置到行尾的所有位置全部清除
16) \033[s 将光标位置保存
17) \033[u 将光标位置恢复
18) \033[?25l 将光标隐藏
19) \033[?25h 将光标显示
# echo -e "\033[30m black characters \033[0m"
# echo -e "\033[31m red characters \033[0m"
# echo -e "\033[32m green characters \033[0m"
# echo -e "\033[33m yellow characters \033[0m"
# echo -e "\033[34m blue characters \033[0m"
# echo -e "\033[35m purple character \033[0m"
# echo -e "\033[36m sky blue character \033[0m"
# echo -e "\033[37m white character \033[0m"
# echo -e "\033[40;37m white characters on black background \033[0m"
# echo -e "\033[41;37m white characters on red background \033[0m"
# echo -e "\033[42;37m white characters on green background \033[0m"
# echo -e "\033[43;37m white characters on yellow background \033[0m"
# echo -e "\033[44;37m white characters on blue background \033[0m"
# echo -e "\033[45;37m white characters on purple background \033[0m"
# echo -e "\033[46;37m white characters on sky blue background \033[0m"
# echo -e "\033[47;30m black characters on white background \033[0m"
# for month in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec;do echo -e "$month\t\c";done
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
(补充:这里以不换行带 tab 输出 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 为例)
# echo -e "\033[2J\033[10A\Eternal Center\c"
(补充:这里以先清屏再不换行输出 Eternal Center 为例)