--作者:飞翔的小胖猪

--创建时间:2021年2月16日

--修改时间:2021年2月20日

说明

每日上传更新一个shell脚本,周期为60天。如有需求的读者可根据自己实际情况选用合适的脚本,也可在评论区留言提出脚本需求,作者会尽快根据需求编写相关脚本对功能进行实现。

每篇文章包含5个脚本。

总进度:5/12

上一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14399775.html

下一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14415847.html

主要内容

21年2月16日-mysql连接脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

mysql连接脚本,在脚本中键入指定的sql执行。好像没有实质性的用处。

文件说明

Mysql_driver.sh:脚本主体文件

脚本主体

[root@135 21_Mysql_driver]# cat Mysql_driver.sh
#!/bin/bash
#定义变量数据相关参数,其他的函数需要使用时直接从这里获取。
connect_db(){
IP=${IP:-127.0.0.1}
PORT=${PORT:-3306}
USERNAME=${USERNAME:-test21}
PASSWORD=${PASSWORD:-123456}
DBNAME=${DBNAME:-test_db}
echo -e "DB connection parameters>> \n HOSTNAME: $IP \n PORT: $PORT \n USERNAME: $USERNAME \n PASSWORD: $PASSWORD \n DB_NAME: $DBNAME"
} #测试数据库是否能够连接。
test_connection_status(){
mysql -h${IP} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"show tables;" &>/dev/null
return $?
} #执行语句函数
edit_data(){
sql_language=${1:- }
echo "sql执行语言为:$sql_language "
mysql -h${IP} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${sql_language};"
if [ $? -eq 0 ];then
echo "Command executed successfully。"
else
echo "Command execution failed!"
fi
} #主函数
main(){
#输入数据连接参数
IP="127.0.0.1"
PORT="3306"
USERNAME="test21"
PASSWORD="123456"
DBNAME="test_db" #需要执行的sql语句,通过执行时传入,如果为传入则查看所有的表名
sql_l='select * from t1;' connect_db
test_connection_status
sql_l_f=`echo "${sql_l} commit;"` if test_connection_status;then
echo "数据库连接成功,可以执行命令。"
edit_data "${sql_l_f}"
else
echo -e "数据库连接失败!!!\nCase:\n 1.请检查连接参数是否正确。\n 2.数据库连接设置是否正确。"
fi
} main

结果

**************************************************************************************************************2021年2月16日脚本结束*****************************************************************************************************************

21年2月17日-显示love脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

循环显示 i love字母。

文件说明

display_love.sh:脚本主体文件

脚本主体

[root@135 22_i_love_you]# cat display_love.sh
#!/bin/bash
trap 'onCtrlC' INT
# 显示LOVE
love1(){
echo ""
echo " #### "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " ## "
echo " #### "
} love2(){
echo ""
echo "## "
echo "## "
echo "## "
echo "## "
echo "## "
echo "## "
echo "## "
echo "## "
echo "#########"
echo "######## "
} love3(){
echo ""
echo " ###### "
echo " ######## "
echo " ### ### "
echo " ### ### "
echo " ### ### "
echo " ### ### "
echo " ### ### "
echo " ### ### "
echo " ######## "
echo " ###### "
} love4(){
echo ""
echo "## ##"
echo "## ##"
echo "## ##"
echo " ## ## "
echo " ## ## "
echo " ## ## "
echo " ## ## "
echo " ## ## "
echo " ### "
echo " # "
} love5(){
echo ""
echo " #############"
echo " ############"
echo " ##"
echo " ##"
echo " ###########"
echo " ###########"
echo " ##"
echo " ##"
echo " ###########"
echo " #############"
} display_love(){
clear
while :
do
for i in {1..5}
do
love${i}
love${i} > love${i}
sleep 0.5
clear
done
sleep 0.7
paste love1 love2 love3 love4 love5
sleep 2
rm -rf love1 love2 love3 love4 love5
clear
done
} #捕获ctrl+c执行删除临时文件。
onCtrlC(){
rm -rf love1 love2 love3 love4 love5 &>/dev/null
exit 99
} display_love

结果

**************************************************************************************************************2021年2月17日脚本结束*****************************************************************************************************************

21年2月18日-echo显示hello word

************************************************************************************************************************************************************************************************************************************

脚本说明

使用echo的定位符来回显示“hello,word!”这句话。

文件说明

advanced_echo.sh:脚本主体文件

脚本主体

[root@135 23_advanced_echo]# cat advanced_echo.sh
#!/bin/bash
clear
hello=("H" "e" "l" "l" "o" "," "W" "o" "r" "d" "!")
arr_len=${#hello[*]}
while :
do
for((i=0;i<$arr_len;i++))
do
let j=$i+3
echo -e "\033[5;${j}H${hello[i]}"
sleep 0.2
done
clear
for((i=$arr_len;i>=0;i--))
do
let j=$i+3
echo -e "\033[5;${j}H${hello[i]}"
sleep 0.2
done
clear
done

结果

**************************************************************************************************************2021年2月18日脚本结束*****************************************************************************************************************

21年2月19日-系统网络接口流量脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

脚本提取/proc/net/dev文件内容计算出系统中网卡流量信息,接口数据流量大小,错误包个数等。

文件说明

net_info.sh:脚本主体文件

脚本主体

[root@135 24_net_info]# cat net_info.sh
#!/bin/bash
#网络流量信息
#通过两次读取/proc/net/dev文件,间隔一秒,导出1秒的网卡流量数据。
net_info(){
echo -e "-------------Net------------\n" #获取网口名
net_dict=`awk '$1!~/lo/{if(NR>2)print $1}' /proc/net/dev|sed 's/\://g'` #截取两个数据间隔时间为1秒
net_info_old=`awk '$1!~/lo/{if(NR>2)print}' /proc/net/dev`
#设置文件提取信息间隔为1秒
sleep 1
net_info_new=`awk '$1!~/lo/{if(NR>2)print}' /proc/net/dev` echo -e "New: \n$net_info_new\n"
echo -e "Old: \n$net_info_old\n" echo "$net_dict"| while read dev_name
do
rx_old=`echo "$net_info_old"|grep $dev_name|awk '{printf $2}'`
rx_new=`echo "$net_info_new"|grep $dev_name|awk '{printf $2}'`
rx_old_p=`echo "$net_info_old"|grep $dev_name|awk '{printf $3}'`
rx_new_p=`echo "$net_info_new"|grep $dev_name|awk '{printf $3}'`
rx_old_e=`echo "$net_info_old"|grep $dev_name|awk '{printf $4}'`
rx_new_e=`echo "$net_info_new"|grep $dev_name|awk '{printf $4}'` tx_old=`echo "$net_info_old"|grep $dev_name|awk '{printf $10}'`
tx_new=`echo "$net_info_new"|grep $dev_name|awk '{printf $10}'`
tx_old_p=`echo "$net_info_old"|grep $dev_name|awk '{printf $11}'`
tx_new_p=`echo "$net_info_new"|grep $dev_name|awk '{printf $11}'`
tx_old_e=`echo "$net_info_old"|grep $dev_name|awk '{printf $13}'`
tx_new_e=`echo "$net_info_new"|grep $dev_name|awk '{printf $13}'` rx=$((${rx_new}-${rx_old}))
rx_p=$((${rx_new_p}-${rx_old_p}))
rx_e=$((${rx_old_e}-${rx_new_e})) tx=$((${tx_new}-${tx_old}))
tx_p=$((${tx_new_p}-${tx_old_p}))
tx_e=$((${tx_old_e}-${tx_new_e})) #echo "$rx"
#echo "$rx_p"
echo -e "Net_name: $dev_name"
echo -e " 收流量/B: $rx\n 收包数/个: $rx_p\n 收错误包/个: $rx_e\n 发流量/B: $tx\n 发包数/个: $tx_p\n 发包错误数/个: $tx_e\n" done } main(){
net_info
} main

结果

**************************************************************************************************************2021年2月19日脚本结束*****************************************************************************************************************

21年2月20日-系统监控脚本(详细版)

************************************************************************************************************************************************************************************************************************************

脚本说明

脚本通过8个函数获取当前操作系统的性能数据,包括cpu、内存、磁盘io、网络流量、进程信息、端口及打开文件限制、系统基本信息、文件md5值比对。

脚本只对使用比较广泛的数据进行采集,如果需要更详细的数据各位看官可在对应的函数中进行代码增减。

文件说明

performance_info.sh:脚本主体文件

脚本主体

[root@135 25_cpu_info]# cat performance_info.sh
#!/bin/bash
#cpu信息
cpu_info(){
Cpu_Num=`nproc` #获取逻辑CPU的个数
Avage_five_cpu=`uptime | sed 's/.*load average: //g' | sed 's#\,##g'|awk '{print $2}'` #采集5分钟CPU负载情况
let Used_rate_cpu=100-`vmstat 1 2 |awk '{if(NR>3){printf $(NF-2) }}'` #cpu使用率
CPU_queue_depth=`vmstat 1 2 |awk '{if(NR>3){printf $1}}'` #cpu队列深度 #cpu信息总输出
echo -e "-------------CPU------------\n"
echo -e "Cpu_num: ${Cpu_Num:-null}\nCpu five avage: ${Avage_five_cpu:-null}\nCPU_rate: ${Used_rate_cpu:-null}\nCPU_queue: ${CPU_queue_depth:-null}\n"
} #内存信息
mem_info(){
all_mem_info=`awk '/^MemTotal|^MemFree|^SwapTotal|^SwapFree|^Buffers|^Cached/{print}' /proc/meminfo` total_mem=`echo "$all_mem_info"|awk '/MemTotal/{printf ("%d\n",$2/1024)}'`
free_mem=`echo "$all_mem_info"|awk '/MemFree/{printf ("%d\n",$2/1024)}'`
total_swap=`echo "$all_mem_info"|awk '/SwapTotal/{printf ("%d\n",$2/1024)}'`
free_swap=`echo "$all_mem_info"|awk '/SwapFree/{printf ("%d\n",$2/1024)}'`
buffer=`echo "$all_mem_info"|awk '/Buffers/{printf ("%d\n",$2/1024)}'`
cached=`echo "$all_mem_info"|awk '/Cached/{printf ("%d\n",$2/1024)}'`
swappiness=`cat /proc/sys/vm/swappiness ` #内存信息总输出
echo -e "-------------Mem------------\n"
echo -e "Swappiness: ${swappiness:-null}"
echo -e "Total_Mem: ${total_mem:-null}MB\nFree_mem: ${free_mem:-null}MB\nTotal_swap: ${total_swap:-null}MB\nFree_mem: ${free_swap:-null}MB\nBuffers: ${buffer:-null}MB\nCached: ${cached:-null}MB\n"
} #磁盘IO信息
io_info(){
#不适用于rhel8以上的版本
disk_num=`iostat -dxy 1 1 |awk '$1~/[svx]d[a-z]$/'|wc -l`
io_info=`iostat -dxy 1 1 |awk '$1~/[svx]d[a-z]$/'` #echo "$io_info" |while read dev_name r_s w_s rkB_s wkB_s rrqm_s wrqm_s rrqm wrqm r_await w_await aqu_sz rareq_sz wareq_sz svctm util
echo -e "-------------I/O------------\n"
echo "$io_info" |while read dev_name line
do
echo -e "Dev_name: $dev_name"
iops=`echo "$line" | awk '{printf ("%f\n",$1+$2)}'`
rbps=`echo "$line" | awk '{printf ("%f\n",$3/1024)}'`
wbps=`echo "$line" | awk '{printf ("%f\n",$4/1024)}'`
rwbps=`echo "$line" | awk '{printf ("%f\n",($3+$4)/1024)}'`
util=`echo "$line" | awk '{printf ("%f\n",$NF)}'` #磁盘信息总输出
echo -e " iops: $iops\n r/bps: $rbps\n r/bps: $wbps\n 吞吐量: $rwbps\n 响应时间: ${util}\n"
done
} #网络流量信息
net_info(){
echo -e "-------------Net------------\n" #获取网口名
net_dict=`awk '$1!~/lo/{if(NR>2)print $1}' /proc/net/dev|sed 's/\://g'` #截取两个数据间隔时间为1秒
net_info_old=`awk '$1!~/lo/{if(NR>2)print}' /proc/net/dev`
sleep 2
net_info_new=`awk '$1!~/lo/{if(NR>2)print}' /proc/net/dev` echo -e "New: \n$net_info_new"
echo -e "Old: \n$net_info_old" echo "$net_dict"| while read dev_name
do
rx_old=`echo "$net_info_old"|grep $dev_name|awk '{printf $2}'`
rx_new=`echo "$net_info_new"|grep $dev_name|awk '{printf $2}'`
rx_old_p=`echo "$net_info_old"|grep $dev_name|awk '{printf $3}'`
rx_new_p=`echo "$net_info_new"|grep $dev_name|awk '{printf $3}'`
rx_old_e=`echo "$net_info_old"|grep $dev_name|awk '{printf $4}'`
rx_new_e=`echo "$net_info_new"|grep $dev_name|awk '{printf $4}'` tx_old=`echo "$net_info_old"|grep $dev_name|awk '{printf $10}'`
tx_new=`echo "$net_info_new"|grep $dev_name|awk '{printf $10}'`
tx_old_p=`echo "$net_info_old"|grep $dev_name|awk '{printf $11}'`
tx_new_p=`echo "$net_info_new"|grep $dev_name|awk '{printf $11}'`
tx_old_e=`echo "$net_info_old"|grep $dev_name|awk '{printf $13}'`
tx_new_e=`echo "$net_info_new"|grep $dev_name|awk '{printf $13}'` rx=$((${rx_new}-${rx_old}))
rx_p=$((${rx_new_p}-${rx_old_p}))
rx_e=$((${rx_old_e}-${rx_new_e})) tx=$((${tx_new}-${tx_old}))
tx_p=$((${tx_new_p}-${tx_old_p}))
tx_e=$((${tx_old_e}-${tx_new_e})) #echo "$rx"
#echo "$rx_p"
echo -e "Net_name: $dev_name"
echo -e " RX: $rx\n RX_P: $rx_p\n RX_E: $rx_e\n TX: $tx\n TX_P: $tx_p\n TX_E: $tx_e\n"
done
} #进程信息
process_info(){
echo -e "----------------------------------------------Process---------------------------------------------\n"
top_head=`ps aux|head -1` #cpu占用top5
top_cpu=`ps aux|grep -v PID|sort -rn -k +3|head` #内存占用top5
top_mem=`ps aux|grep -v PID|sort -rn -k +4|head` #业务进程传参
yw_p_name="sshd"
yw_p_num=`ps -ef | grep -i ${yw_p_name:- } | grep -v grep|wc -l` #僵尸进程
zombie_num=`ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'|wc -l` #打开进程数
process_num=`ps -aux | wc -l` #最大允许进程数
limit_total_p_n=`ulimit -u` #程序相关总输出
echo -e "$yw_p_name进程数量: ${yw_p_num:-null}\n僵尸进程数量: ${zombie_num:-null}\n运行进程数量: $((${process_num:-null}-1))\n当前用户允许进程数: ${limit_total_p_n:-null}\n"
echo -e "$top_head\nCpu---------------\n$top_cpu\n\nMem------------------\n$top_mem\n" } #端口及文件
port_file_limit(){
echo -e "-------------Port && File------------\n"
#端口数分别统计ipv4和ipv6
port_4_n=`netstat -alntup | grep -v -E '^tcp6|^udp6' |egrep -i '^tcp|^udp|^TCP|^UDP'| wc -l`
port_6_n=`netstat -alntup | grep -E '^tcp6|^udp6' | wc -l` #监听端口
list_port_n=`netstat -ntlpu | egrep -i '^tcp|^udp|^TCP|^UDP'|wc -l` #总端口数
total_n=`netstat -alntup| egrep -i '^tcp|^udp|^TCP|^UDP'|wc -l` #打开文件总数
open_f_num=`lsof | wc -l` #允许打开文件数
limit_total_f_n=`cat /proc/sys/fs/file-max` echo -e "ipv4端口: ${port_4_n:-null}\nipv6端口: ${port_6_n:-null} \n监听端口: ${list_port_n:-null}\n总打开端口数: ${total_n:-null}\n允许最大端口数: 65535\n打开文件总数: ${open_f_num:-null}\n允许打开文件数: ${limit_total_f_n:-null}"
} #系统及基本信息
system_info(){
if cat /proc/version|grep -i centos &>/dev/null;then
system_version='Centos'
elif cat /proc/version|grep -i redhat &>/dev/null;then
system_version='Red hat'
elif cat /proc/version|grep -i debian &>/dev/null;then
system_version='Debian'
elif cat /proc/version|grep -i Ubuntu &>/dev/null;then
system_version='Ubuntu'
elif cat /proc/version|grep -i suse &>/dev/null;then
system_version='Suse'
else
echo "This system Manufacturer : unknown"
fi machine_name=`hostname`
line_n=`w |awk 'NR>2{print $1}'|wc -l `
login_user=`w |awk 'NR>2{print $1}' |sort -r -n |uniq`
ip_address=`ip a|grep -i -A2 'MULTICAST,UP,LOWER_UP' | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" |grep -E -v "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.255" | head -1 `
System_start_time=`uptime | awk '{print $1}'` #得开机时间
System_uptime=`uptime |awk -F ',' '{print $1}' |sed 's#.*up##g'` #得到运行时常 #系统信息总输出
echo -e "-------------System------------\n"
echo -e "开机时间: ${System_start_time:-null}"
echo -e "运行时间: ${System_uptime:-null}"
echo -e "系统厂商: ${system_version:-null}\n主 机 名: ${machine_name:-null}\nIp 地 址: ${ip_address:-null}\n登录用户: ${login_user:-$USER}\n在线用户数: ${line_n:-null}\n"
} #检测关键文件md5值
Check_file_md5(){
echo -e "-------------File_sum------------\n时间: `date`\n"
#读取文件路径生成MD5保存到临时文件中
first_ctl=0
for file_name in /etc/passwd /etc/group /etc/shadow
do
if [ -f .history_sum.txt ];then
#如果first_ctl变量为1表示为第一次获取md5值
if [ ${first_ctl} -eq 1 ];then
md5sum $file_name >> .history_sum.txt
fi #对比md5值
new_sum=`md5sum $file_name|awk '{printf $1}'`
old_sum=`cat .history_sum.txt |grep ${file_name}|awk '{printf $1}'`
if [ "${new_sum}" == "${old_sum}" ];then
#echo "`date` Check ${file_name} not changed." >> /var/log/message
echo "Check ${file_name} not changed."
else
#echo "`date` Check ${file_name} changed!!!" >> /var/log/message
echo "Check ${file_name} changed!!!"
fi else
#地没有历史文件,创建一个并且把控制变量置1
first_ctl=1
md5sum $file_name >> .history_sum.txt
#echo "`date` Check ${file_name} not changed." >> /var/log/message
echo "Check ${file_name} not changed."
fi
done
echo ""
} main(){
cpu_info
mem_info
io_info
net_info
process_info
port_file_limit
system_info
Check_file_md5
} main

结果

**************************************************************************************************************2021年2月20日脚本结束*****************************************************************************************************************

60天shell脚本计划-5/12-渐入佳境的更多相关文章

  1. 60天shell脚本计划-12/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月23日 --修改时间:2021年3月27日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  2. 60天shell脚本计划-8/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月3日 --修改时间:2021年3月7日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...

  3. 60天shell脚本计划-11/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月18日 --修改时间:2021年3月22日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  4. 60天shell脚本计划-10/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月13日 --修改时间:2021年3月17日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  5. 60天shell脚本计划-9/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月8日 --修改时间:2021年3月12日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...

  6. 60天shell脚本计划-7/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月26日 --修改时间:2021年3月2日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...

  7. 60天shell脚本计划-6/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月21日 --修改时间:2021年2月25日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  8. 60天shell脚本计划-4/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月11日 --修改时间:2021年2月15日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  9. 60天shell脚本计划-3/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月6日 --修改时间:2021年2月10日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...

随机推荐

  1. golang中的runtime包

    1. runtime.Gosched  让出CPU时间片,重新等待安排任务 package main import ( "fmt" "runtime" ) fu ...

  2. APP 性能分析工作台——你的最佳桌面端性能分析助手

    目前 MARS-App 性能分析工作台版本为开发者提供Fastbot桌面版的服务. 旨在帮助开发者们更快.更便捷地开启智能测试之旅,成倍提升稳定性测试的效率. 作者:字节跳动终端技术--王凯 背景 F ...

  3. jsp 4-14 知识总结

    二   string类型 装换 boolean 的方法? 三   attribute对象  set 和 get  的用法 四  jsp 的四种属性范围? 五  jsp  <%  %>  和 ...

  4. Lesson8——Pandas reindex重置索引

    pandas目录 1 简介 重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行.列标签与 DataFrame 中的数据逐一匹配.通过重置索引操作,您可以完成对现 ...

  5. synchronized类锁,对象锁,方法锁

    synchronized从语法的维度一共有3个用法: 静态方法加上关键字 实例方法(也就是普通方法)加上关键字 方法中使用同步代码块 前两种方式最为偷懒,第三种方式比前两种性能要好. synchron ...

  6. UITableView的全部属性、方法以及代理方法执行顺序,看过之后肯定有收获---董鑫

    UITableView-------表视图--继承UIScrollView并遵守NSCoding协议 属性 frame-------------设置控件的位置和大小 backgroundColor-- ...

  7. Linux常用命令精华讲解 上部 (下部下回分解)不要催很忙的

    Linux常用命令讲解 1.Linux命令基础 2.Linux命令帮助 3.目录与文件的基操 1.Shell是系统中运行的一种特殊程序在用户和内核之间充当"翻译官"的角色,登录li ...

  8. -bash: ./bin/shutdown.sh: /bin/bash^M: bad interpreter: 没有那个文件或目录

    为什么会出现这种问题: 1.这个问题的原因就是我们放在服务器的脚步类型是dos,而不是unix类型,所以会导致出现(-bash: ./bin/shutdown.sh: /bin/bash^M: bad ...

  9. shell基础——数组

    定义数组 #小括号,空格 arr=(v1 v2 v3) arr=(`ls`) 打印数组 echo ${arr[0]} #下标从0开始 echo ${arr[*]} #整个数组 echo ${arr[@ ...

  10. Java两个整数相除保留n位小数

    方式1:被除数转double后,除以除数,结果是一个double类型的数,将double结果按要求保留n位小数即可. 保留n位小数的写法 int a = 10; int b = 3; double r ...