shell shell脚本编写常用命令 语法 shell 脚本工具推荐

shell 脚本

计算机语言

Shebang 定义解释器

主要定义,您的脚本是用什么语言写的

#!/usr/bin/python    //定义这是一个python语言#!/bin/bash    //定义这是一个shell语言
echo @SHELL

我们执行的 linux 命令的时候,其实是使用 /bin/bash 这个二进制文件对 命令文件执行的。

路径问题处理

执行脚本的时候,脚本中的路径会以用户当前位置开始计算
所以 推荐使用根路径 来对文件进行编辑pwd
echo  $(dirname $0) && echo "执行成功"echo /root/k/king/a.shcat /root/k/king/a.sh   # 执行成功# 处理路径问题echo $(dirname $0)/king/a.shcat /root/k/king/a.sh   # 执行失败$(dirname $0) == /root/k
/root/k/king/a.sh
/root/k/king/a.sh
shell 能做什么
自动备份和恢复,mysql  
自动化管理
自动化信息采集监控,对 系统硬件 指标 采集回来。(主要用在监控层面)
自动化扩容  

shell 脚本必须

获取路径
假设一个文件
dirname /a/b/c.shbasename c

父进程调用子进程 source

# 父进程 调用子进程 
# 如果要调用 子进程脚本
需要 使用  
source

拒绝 ctrl + c

添加 trap : INT 之后则此进程不可以使用 ctrl + c 中断

trap : INTfor i in {1..100}
do  trap : INTi=$[ $i +1 ]echo "$i"sleep 1
done

括号使用

[[ ]]  		# 判断
(()) == []  # 判断
() == `` 	# 优先执行
[ "aslfjdl" =~ a.*e ];
${i}			# 调用某个变量
$[ ]			# 对括号里的 公式进行运算

常见输出

1>
2>
&>			#混合输出
1&>2		# 把正确输出修改为错误输出
2&>1		# 把错误输出修改 正确输出>>			# 追加
>			# 覆盖------------------------------------------------------------
#重定向输入
cat >>  << EOF
内容1
内容1EOF

查看当前系统所以变量

env
-------------------------------------------------------------------
XDG_SESSION_ID=5
HOSTNAME=master1
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.12.155.180 53606 22
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=10.12.155.180 53606 10.12.155.146 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env-------------------------------------------------------------------
echo $USER  # 可以用来输出 环境变量

su 切换

su - xiaoming
表示切换到用户xiaoming,并且同时切换到该用户的环境。这意味着系统会使用用户xiaoming的环境变量、工作目录,以及其他相关设置。这样可以模拟用户xiaoming登录系统后的环境。su xiaoming
表示切换到用户xiaoming,但不会切换到该用户的环境,会保持当前环境。这样的切换可能会保留调用者的环境变量和工作目录。

别名alias

常用于太长记不住的命令

alias  asname = '{语句}'

前台执行 后台执行

# 前台放到后台
sleep 1000ctrl + zbg % {工作号}
bg % 1# 放在后台执行
sleep  1000 &# 可以退出信号nohup sleep 1000 & ## 需要两个回车  

管道


ip a | grep inet | awk 'NR==3 {print $2}'| cut -d/ -f1 
# cut -d/ -f1  /用来分割字符串的  -d 是指定分隔符  -f 是指定打印 第几列ip a | grep inet | awk 'NR==3 {print $2}'| awk -F'/' '{print $1}'
# awk 默认以空格为分隔符
# awk -F 可以指定分隔符号

xargs -a 、-exec

cat a.txt | xargs  -i cp {} /{目录}  

条件判断

;	# 多个简短的语句   一起执行
&&	# 前边执行 成功才会执行后边
||	# 前边执行 不成功才会执行后边

通配符

{}		# 集合{1..100},{a..z}
?		# 匹配的时候  代表一个字符 只代表一个字符
*		# 代表任意多个字符
[]		# 只匹配中括号里边的一个字符 a[xyz]b   会匹配到 axb ayb azb 
[!]		# 只匹配中括号里边的一个字符 a[!xyz]b   会匹配到不是这些 axb ayb azb
[0-9]	# 匹配到 0 到 9  一个数字
[0-9]+	# 匹配到 0 到 9  多个多个数字

查看历史历史命令

history
# 在此文件中配置
vim /etc/profile## 主要配置这个参数HISTSIZE=1000

上一条命令最后一条参数

esc + .		# 在命令含中执行
!$ 			# 可以用于脚本中

部分快捷健

ctrl  +  a  # 光标移动到 行首
ctrl  +  e 	# 光标移动到  行尾

shell 脚本规范

1、shell 脚本结尾 要使用 .sh  进行结尾(内容会高亮 看见文件就知道这是一个sh脚本)
2、定义解释器 (#!/bin/bash)autocmd BufNewFile *.sh exec ":call AddTitleForShell()"
function  AddTitleForShell()call append(0,"#!/bin/bash")call append(1,"# *********************************************************#")call append(2,"#                                                          #")call append(3,"# * Author        : 白嫖一茶                               #")call append(4,"# * QQ邮箱址      : 2534824121@qq.com                      #")call append(5,"# * Create time   : ".strftime("%Y-%m-%d %H:%M:%S")."                    #")call append(6,"# * Filename      : ".expand("%:t")."                                   #")call append(7,"# * Description   : This is Shell scripts                  #")call append(8,"#                                                          #")call append(9,"#                                                          #")call append(10,"# *********************************************************#")
endfunction
5、执行脚本的方法
sh  	{脚本文件}		# 不会影响当前父shell
bash 	{脚本文件}		# 不会影响当前父shell.{脚本文件}				# 会影响当前父shell
source {脚本文件}		# 会影响当前父shell./{脚本文件}

vscode:

可以使用vscode 安装 一下工具 方便编写脚本 以及测试
在这里插入图片描述

安装插件

  • che中文
  • Remote-SSH
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host {ip}HostName {ip}User {用户}

变量的类型 变量定义

当a脚本要调用 b脚本的时候 需要

# 自定义变量variate="这是一个变量"			# 临时变量
export name=lisi				# 环境变量
set variate="这是一个变量"     	# 取消一个变量# 获取 用户变量
read
read -p "请输入名字:" name
read -t  {10}    			## 超时时间
read -s					## 不要回显## 输入默认值{leval:{默认值}}# 预定义变量  系统帮我们定义好的
$?			# 返回上一条 命令 执行结果 
$$			# 当前进程PID# 查看环境变量
env 		# 查看环境
set 		# 查看所有变量
unset {变量名}	#删除变量 取消变量
export 		# 所有变量/usr/local/mysql/:$PAHT  # 把自己安装的服务加入环境变量# 位置参数 传参(执行脚本之后 给脚本传递的参数) 
$1 $2		# 执行的时候再代码后边添加一个参数// a.sh hello //echo  "你输入的是: $1"
$0			# 表示 整行
$#			# 位置参数的 总量
$@			# 统计位置参数的内容 ($1 获取位置变量 就是执行脚本呢 时 后边跟的参数) "$@" 还是一个一个来处理
$*			# 统计位置参数的内容 () "$*" 会当成一个整体的字符串来处理
$!			# 上一个后台进程 的PIDecho $0 			# 返回脚本  路径文件 
dirname $0		# 返回脚本命令
basename $0 		# 返回脚本名字# 脚本路径
curPath=$(cd `dirname $0`;pwd)  #脚本路径做一个参数#使用变量
echo ${variate}     			# {}花括号 防止中间有空格 
echo "$variate"					# 防止中间有空格 
echo '$variate'					# 把$ 当成字符串
执行	
echo '\$variate'				# 把$ 当成字符串执行	\$variate
echo "\$variate"				# 转义# 常用环境变量
USER
UID
HOME
HOSTNAME
PWD
PATH

父shell 定义一个变量 ,子shell 也会继承这个变量

每次执行脚本都会 启动一个子shell

变量命名

  • 建议使用驼峰命名法
  • 不能以数字开头
  • 等号两边 不能有空格
  • 定义字符串的时候 用引号引起来

接入值(read)

# 获取 用户变量
read
read -p "请输入名字:" name
read -t      			## 超时时间
read -s					## 不要回显## 输入默认值{leval:{-默认值}}

参数

read -p "请输入名字:" name{{变量}:{-默认值}} 		# 不会修改原有的值  此时变量还是空的# 案例{name :-刘德华} 		## 案例{name :=刘德华}		# 对 name 进行复制echo ${name:?名字不能为空}	# 如果name 是空 或者未设置# 原有值不变,显示 word 内容
${变量:+word}

变量匹配

a="hello world"echo ${a}# 用来截取字符串 #* 再前边 开始截取
echo "${a#*l}"# ##* 贪婪匹配 匹配到最后一个
echo "${a##*l}"# 用来截取字符串 %{字符}* 从后边 开始截取
echo "${a%l*}"# %%* 贪婪匹配 匹配到最后一个
echo "${a%%l*}"# 替换输出
a=www.taobao.com
## 替换单个
echo ${a/taobao/baidu}# 替换全部
echo ${a//a/w}------------------------------------------------------------------------------
a=123456789# 统计字符串的长度
echo ${#a}# 从第二位之后开始截取 
echo ${a:2}# 从第二位之后开始截取  到第四位
echo ${a:2:4}# 从第二位之后开始截取  到倒数第二位
echo ${a:2:-2}# 从头开始截取 到倒数第二位
echo ${a:0:-2}

命令回显

stty  -echo   	# 输入的时候-不显示命令 

引号

`{命令}`
$({命令})ip -f inet a show dev ens33

awk&cut

uptime | awk '{print $3,$4,$5}'awk  -F ','       			#指定分割符号  这里指定的是 ,awk '{print $NF}'			# NF打印 总列数  总列书数嘛 最后一个也是总列数cut -d- -f1					# 以- 为分隔符   第一列的值

一次性写入多行

# 可以使用 输入重定向
echo >> {文件名}  <<EOF
{line 1}
{line 2}
{line 3}
EOF

变量运算

# 运算符号
+
-
*
/
%		# 取余# 如果$1 位置为空 那么 将0 赋值给 $1
x=${1:-0}
x=${1:-0}# 运算
x=2
y=9
echo $(($x+$y))
echo $[$x+$y]# 优先运算echo $(((3+5)/2))# expr
expr 2 + 3
expr 2 \* 3
expr 2 "*" 3
expr 2 / 3# 获得一个随机数字
$RANDOM$(($RANDOM % 10))  		# 取0-9
$(($RANDOM % 10 +1 ))  		# 取1-10

浮点数 运算

# 安装运算工具 bc
yum -y install bc1# 使用方法 
echo $((10/3)) | bc# 高级数学库 (直接把公式 给他即可)echo $((2+4)) | bc -l# 计算圆周率
echo "scale=10000;4 * a(1)" | bc -l

流程控制

条件判断 -test条件

# 判断真假 如果成立则返回 true  否则 返回 fless
tast  1 -gt 5# 并且
-a# 或者
-o# 如果字符串是真的  则返回真
-n# 如果字符串 是空的  则返回时真
-z
------------------------------------------------------------------------------
#判断数字-eq 	# 等于
-ne 	# 不等于
-ge 	# 大于等于
-le  	# 小于等于
-gt  	# 大于
-lt		# 小于------------------------------------------------------------------------------# 判断文件是否存在  并且是个块设备
-b {文件}test -b /dev/sdc# 文件存在 且时一个目录
-d {文件}# 文件存在并且时一个普通文件
-f {文件}# 文件存在且是一个链接文件
-h {文件}# 只要有 就返回真
-e {文件}

条件判断

# 双条件if [-e /etc/passwd];thenecho "文件存在"
elseecho "文件不存在"
fi
------------------------------------------------------------------------------------
if [-e /etc/passwd];thenecho "{如果文件存在则执行这里的代码}"
else[[-e /etc/passwd]] && echo "{如果文件存在则执行这里的代码}"------------------------------------------------------------------------------------
# 多条件判断
read -t 5 -p"请输入您的年龄:" ageif [ $age -gt 70 ] && [ $age -le 150 ];then echo "老年"
elif [ $age -gt 40 ] && [ $age -le 70 ];thenecho "中年"
elif [ $age -gt 18 ] && [ $age -le 40 ];thenecho "青年"
elif [ $age -ge 0] && [ $age -le 18 ];then  # 大于等于echo "小屁孩"
elseecho "噶了"
fi
-----------------------------------------------------------------------------------
# 
read -t 5 -p"请输入您的年龄:" score
case $score in
90)echo "清华";;
60)echo "家里";;
*)echo "不及格"
esac

循环

简单循环 (for)

 for i in {1..100}
doecho "$i"
done# 范围支持## 空格 1 2 3 4## 逗号 {1,2,3,4}## tab  1	2	3##  for i in (cat  file.txt)##  for i in seq 100   			# 1到一百##  for i in seq 2 100   		# 2到一百##  for i in $(seq -w 2 100)   # 0 填充
-------------------------------------------------------------------------------for i in {a..z}
doecho "$i"
done
-------------------------------------------------------------------------------
# 两个集合破解for i in {a..z}{1..10}
doecho "$i"
done
-------------------------------------------------------------------------------
# 上上边的区别在于  这个次数是一个变量
i={次数}
for ((j=0; j<i; j++)); do执行多少次
done

双重循环

for i in {1..100}
do# clearline="<---------------------------------------------------------------------------------------------------->"for ((j=0; j<i; j++)); doline=$(echo "$line" | sed 's/-/=/')doneecho "$line $i %"sleep 0.1# echo "$i"# echo "Hello, World!"done

循环(while)

i=0
while [$i -lt 100]
do a=$[$a+1]echo "$a"
done---------------------------------------------------------------------------------------
# 循环打印某个文件 每一行  可以把数据放入某个文件中 进行批量处理
while read line
do echo $line
done </etc/passwd -----------------------------------------------------------------------------------------------
# 这是一个死循环  : 这里直接跳过 
while :
doecho ""
done

let a++

i=0
while [$i -lt 100]
do let a++echo "$a"
donea=$[$a+1] ==  let a++

位置参数 左移


sh  a.sh  1 2echo $1
shift 
echo $2会输出两个1

跳过循环(continue、break)

 for i in {1..10}
doif [ $i eq 5 ];thencontinuefiecho "$i"
done
# shift 
# continue 跳过本次循环 进行下次循环
# break 结束整个循环 继续下一个程序
# exit 结束程序

函数(接口)

一次做好,多次使用。避免重复造轮子

  • 定义函数
  • 调用函数
  • 取消喊出
  • 函数传参

定义函数

# function 声明函数
# check  是函数的名字
# () 没有实际意义
# {} 函数体
function check(){echo 111
}
----------------------------------------------------------------
# 直接写 
check(){echo 111
}
----------------------------------------------------------------
# 本地调用function check(){echo $1
}check 111
----------------------------------------------------------------
# 远程调用(调用别的sh 文件的函数)
比如我要调用 上边文件的内容
source {函数文件路径}
check 222

用函数 查看ip

ip_list="www.baidu.com www.taobao123.com 10.12.155.149"func(){for i in $ip_listdoping -W1 -c1 $i &>/dev/nullif [ $? -eq 0 ]; thenecho $ifidone
}

函数周期

a=10func(){local		# 使用loacl 之后 变量在函数中的值 不会影响函数外边a=20echo $a
}
func

func(){ping -W1 -c1 www.baidu.com &>/dev/nullif[ $? -eq 0 ];thenecho "网络通常"returnelse ping -W1 -c1 8.8.8.8 &>/dev/nullif [ $? -eq 0 ];thenecho "dns 配置错误"return  10elseping -W1 -c1 192.168.100.2&>/dev/nullif [ $? -eq 0 ];thenecho "本地网络环境异常,请检查"return 20elseecho "请检查 网关"return 30fififi}
func
result=$?  # func 返回结果赋值给 result
if [ $result -eq 0 ];thenecho "网络通畅"
elif [ $result -eq 10 ];thenecho "DNS配置错误"
elif [ $result -eq 20 ];thenecho "DNS配置错误"
elif [ $result -eq 30 ];thenecho "DNS配置错误"



脚本测试

sh -n {脚本文件}  		# 判断语法上的错误sh -x {脚本文件} 		# 不执行脚本 只是检查语法模式,将返回所有错误语法sh -v {脚本文件}		#打印执行的过程

查看用户 ip

env | grep SSH

判断httpd 是否启动

systemctl status firewalld | grep Active | awk -F  {print $2}

随机生成密码

yummkpasswd -l 10      	 #-c 5 			#

echo 输入颜色调试

echo

#!/bin/bash  
# 先定义一些颜色:echo -e "\e[1;31m   LoveLo    LoveLo \e[0m"red='\e[0;41m' # 红色  
RED='\e[1;31m'
green='\e[0;32m' # 绿色  
GREEN='\e[1;32m'
yellow='\e[5;43m' # 黄色  
YELLOW='\e[1;33m' 
blue='\e[0;34m' # 蓝色  
BLUE='\e[1;34m'
purple='\e[0;35m' # 紫色  
PURPLE='\e[1;35m'
cyan='\e[4;36m' # 蓝绿色  
CYAN='\e[1;36m'
WHITE='\e[1;37m' # 白色NC='\e[0m' # 没有颜色echo -e "${red}显示红色0 ${NC}"
echo -e "${RED}显示红色1 ${NC}"    
echo -e "${green}显示绿色0 ${NC}"
echo -e "${GREEN}显示绿色1 ${NC}"  
echo -e "${yellow}显示黄色0 ${NC}"
echo -e "${YELLOW}显示黄色1 ${NC}"    
echo -e "${cyan}显示蓝绿色0 ${NC}"
echo -e "${CYAN}显示蓝绿色1 ${NC}"----------------------------------------------------------------tput# 语法
## 更换 背景颜色
tput  setab 2
## 更换 字体颜色
tput  setab 20 黑色
12 绿5 是粉色 {杨红}7 白色闪烁
tput setab  颜色代码 //背景色
tput setaf  颜色代码  //字体颜色
tput sgr0   //颜色重置
==================================
数值	0	 1	  2	  3	  4	    5    6	 7
颜色	黑	红	绿	黄	蓝	洋红	黄	白
=====================================================================================================echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"  //设置文本颜色
echo -e "\033[0;32m字符串\033[0m"     //设置文本为绿色,背景没有颜色
echo -e "\033[0;$(($RANDOM%7+30))m字符串\033[0m"      //随机生成一个颜色其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47
F       B
30    40    黑色
31    41    红色
32    42    绿色
33    43    黄色
34    44    蓝色
35    45    紫红色
36    46    青蓝色
37    47    白色'\E[33;5m 文本 \E[0m'     //33黄色,黄色闪烁tput setab  颜色代码 //背景色
tput setaf  颜色代码  //字体颜色
tput sgr0   //颜色重置
==================================
数值	0	 1	  2	  3	  4	    5    6	 7
颜色	黑	红	绿	黄	蓝	洋红	黄	白

案例

判断脚本在某个位置

path=$(cd $(dirname $0) ;pwd)
[[ $path ="/opt/scripts" ]] && echo "执行成功" || echo "不在路径"

工具箱

#!/bin/bash
# *********************************************************#
#                                                          #
# * Author        : 白嫖一茶                               #
# * QQ邮箱址      : 2534824121@qq.com                      #
# * Create time   : 2023-12-28 17:22:18                    #
# * Filename      : jiegeTools.sh                                   #
# * Description   : This is Shell scripts                  #
#                                                          #
#                                                          #
# *********************************************************#
while :
docat <<EOF@===========================================================@@                                                           @@            Welcome use system tools                       @@            1.Config aliyun_yum                            @@            2.System init                                  @@            3.source install mysql                         @@            4.source install PHP                           @@            6.source install nginx                         @@            0.退出                                         @@                                                           @@===========================================================@
EOFread -p "请输入" numcase $num in0)exit 0;;1)source ./system-libs/config_aliyun.shif [ $aliyun_yum_code -eq 0 ]; then	fiecho "开始执行 条件一";;2)echo "开始执行 条件二";;3):     # 这里是一个占位符,表示你不用管我;;4)echo "未开发"exit 1   # 控制返回;;5)echo "未开发"exit 1   # 控制返回;;6)echo "未开发"exit 1   # 控制返回;;*)esac
done

随机密码工具箱


#! /bin/bash
cat <<EOF
==========================================================1 条件 11 条件 21 条件 3
==========================================================
EOFread -p "请输入" num
case $num in
1)echo "开始执行 条件一";;
2)echo "开始执行 条件二";;
2):     # 这里是一个占位符,表示你不用管我;;
4)echo "未开发"exit 1   # 控制返回
*)
esac

变量嵌套


name=kobe
kobe=24eval echo "$""$name"# 先获取 name 的值,再进行构造, 从而获取到的值

获取主机信息脚本

  • 1、编写规范、注意缩进、解释器
  • 2、收集信息、内存、磁盘、用户、时间、IP
  • 3、输出信息
#! bin/bash# 1、编写规范、注意缩进、解释器
# 2、收集信息、内存、磁盘、用户、时间、IP
# 获取内存
echo -e "剩余内存:`free -m | awk '/^Mem/{print $4}'`MB"## 修改颜色echo -e "\033[31m文本\033[0m"## 多种颜色 获取一个随机数echo $[$RANDOM % 7 + 31]# 根分区百分比
df -hT | awk '/\/$/{print $6}'# 用户
w -h
w -h | awk '{print $1}'|sort |uniq -c | awk '{print $2}'# 客户端IPecho $SSH_CLIENT | awk 'print $1' curl http://httpbin.org/ip# 3、输出信息-------------------------------------------------------------------------
# 编写一个shell脚本,用于搜集其执行主机的信息,打印结果如下: # [root@tiger tmp]# ./test.sh# 2012年 05月 24日 星期四 17:07:45 CST# 当前的用户为 root# 当前用户的宿主目录为 /root 用户的标识为 0# 主机名称为 newrain# 网卡的IP地址为 192.168.1.106

主机存活

#!/bin/bash
wangduan='10.12.155'
for i in {1..254}
doping -W -c1 $wangduan$1 > /dev/nullif [$? -eq 0];thenecho "$wangduan$1" >> ok.txtelseecho "$wangduan$1" >> no.txtfi
done$? 返回的是 0 则代表上一条命令

创建十个用户

# 创建十个用户 截取uuid 第一段为 密码  把密码保存到一个文件中
# user_01  -- user_10
uname=user_
isPasswd="密码是"
for i in $(seq -w 10)
doecho $uname$iuseradd $uname$i myPasswd=$(echo `uuidgen` | awk -F "-" '{print $1}')echo $myPasswd | passwd  --stdin $uname$iecho $uname$i$isPasswd$myPasswd >> ./myP.txt# userdel -r $uname$i  # 删除用户
done

99乘法表

for i in $(seq 9)
dofor j in $(seq 9)doecho -ne "$i * $j = $(($i * $j))\t"doneecho ''
doneecho -----------------------------------------------------------------------
# 三角for i in $(seq 9)
dofor j in $(seq $i)doecho -ne "$i * $j = $(($i * $j))\t"doneecho ''
done

vim 打开显示信息

cat > /root/.vimrc << EOF
set ignorecase
set cursorline
set autoindent
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()if expand("%:e") == 'sh'call setline(1,"#!/bin/bash")call setline(2,"#")call setline(3,"#**************************************")call setline(4,"#Author:        liujie")call setline(5,"#QQ:            945225432")call setline(6,"#Date:          ".strftime("%Y-%m-%d"))call setline(7,"#FileName       ".expand("%"))call setline(8,"#**************************************")call setline(9,"")endif
endfunc
autocmd BufNewFile * normal G
EOF

回的是 0 则代表上一条命令

创建十个用户

# 创建十个用户 截取uuid 第一段为 密码  把密码保存到一个文件中
# user_01  -- user_10
uname=user_
isPasswd="密码是"
for i in $(seq -w 10)
doecho $uname$iuseradd $uname$i myPasswd=$(echo `uuidgen` | awk -F "-" '{print $1}')echo $myPasswd | passwd  --stdin $uname$iecho $uname$i$isPasswd$myPasswd >> ./myP.txt# userdel -r $uname$i  # 删除用户
done

99乘法表

for i in $(seq 9)
dofor j in $(seq 9)doecho -ne "$i * $j = $(($i * $j))\t"doneecho ''
doneecho -----------------------------------------------------------------------
# 三角for i in $(seq 9)
dofor j in $(seq $i)doecho -ne "$i * $j = $(($i * $j))\t"doneecho ''
done

vim 打开显示信息

cat > /root/.vimrc << EOF
set ignorecase
set cursorline
set autoindent
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()if expand("%:e") == 'sh'call setline(1,"#!/bin/bash")call setline(2,"#")call setline(3,"#**************************************")call setline(4,"#Author:        liujie")call setline(5,"#QQ:            945225432")call setline(6,"#Date:          ".strftime("%Y-%m-%d"))call setline(7,"#FileName       ".expand("%"))call setline(8,"#**************************************")call setline(9,"")endif
endfunc
autocmd BufNewFile * normal G
EOF

未完结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙应用开发 应用内字体大小调节

1 数据管理概述 在移动互联网蓬勃发展的今天&#xff0c;移动应用给我们生活带来了极大的便利&#xff0c;这些便利的本质在于数据的互联互通。因此在应用的开发中数据存储占据了非常重要的位置&#xff0c;HarmonyOS 应用开发也不例外。 本文将为您介绍 HarmonyOS 提供的数据…

stm32 HAL库 4096线ABZ编码器

[TOC]目录 ABZ编码器 4096线 买的是这个 AB相代表计数方向&#xff0c;Z代表过零点 cubemx配置 定时器Encoder 也可以选上DMA 中断 Z相GPIO中断 找一个空闲管脚 打开对应中断 代码 不用DMA int main(void) {short Enc_cnt 0;HAL_TIM_Encoder_Start_IT(&ht…

DrGraph原理示教 - OpenCV 4 功能 - 单通道图

通道 OpenCV的核心处理对象是Mat&#xff0c;大体是一个二维数组&#xff0c;加上了各种功能函数。 很多的图像处理&#xff0c;会在单通道或二值化的基础上进行&#xff0c;比如连通域、目标识别等。这里的通道就是channels。 不同的图像处理算法可能对通道数有特定的要求。例…

HTML5+CSS3+JS小实例:过年3D烟花秀

实例:过年3D烟花秀 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><…

#前后端分离# 头条发布系统

头条业务简介 用户功能 注册功能登录功能jwt实现 新闻 新闻的分页浏览通过标题关键字搜索新闻查看新闻详情新闻的修改和删除 预览界面 开源上线 https://gitcode.net/NVG_Haru/NodeJS_5161447 数据库设计 数据库脚本 CREATE DATABASE sm_db;USE sm_db;SET NAMES utf8mb4…

半导体行业-SECS/GEM协议 JAVA与SECS/GEM通信 什么是配方?springboot集成SECS通信协议 配方管理S7FX

Java与SECS基础通信 Java实现SECS指令S2F17获取时间 Java实现SECS指令 S10F3 终端单个显示例子 Java实现SECS指令 S7FX配方管理 Java实现SECS指令 S5F1报警/取消报警上传 实例源码及DEMO请查阅 JAVA开发SECS快速入门资料&#xff0c;SECS S7F19 什么是半导体配方&…

初识javaWeb

一、JavaWeb是什么&#xff1f; 1、概念 javaWeb指的是使用java语言进行互联网领域项目开发的技术栈——进行web项目开发所需的技术的集合。 -Web前端——在浏览器中用户可以看到的网页 -Web后端——为前端提供数据的程序 2、Web项目 java语言是可以进行多种类型的项目开发&a…

网大为卸任腾讯CXO;Midjourney 1 月训练视频模型;2023年马斯克赚了7700亿

投融资 • 2023 年大型科技公司在生成式 AI 初创企业上的投资远超风险投资集团• 恒信东方与无锡政府合作成立布局 MR/XR 技术及 3D 数字资产 AIGC 产业投资基金• 新公司法完善注册资本认缴登记制度• 网大为卸任腾讯CXO&#xff0c;曾促成南非MIH的投资• 宁波蔚孚科技完成数…

【VS】NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。

问题描述 报错 NETSDK1045 严重性代码说明项目文件行禁止显示状态错误NETSDK1045当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低版本设置为目标&#xff0c;或使用支持 .NET 6.0 的 .NET SDK 版本。RCSoftDrawMicrosoft.NET.TargetFrameworkInference.ta…

年度总结|存储随笔2023年度最受欢迎文章榜单TOP15-part2

TOP11&#xff1a;PCIe在狂飙&#xff0c;SAS存储之路还有多远&#xff1f; 随着科技的飞速发展&#xff0c;固态硬盘&#xff08;SSD&#xff09;已经成为现代计算机系统中不可或缺的一部分。它以其出色的性能和可靠性&#xff0c;改变了我们对于存储设备的期待。当前业内SSD广…

Java(算术,自增自减,赋值,关系,逻辑,三元)运算符,运算符的优先级,隐式转换,强制转换,字符串的+。

文章目录 1.运算符和表达式运算符&#xff1a;表达式&#xff1a; 2.算术运算符练习&#xff1a;数值拆分 3.隐式转换概念&#xff1a;简单记忆&#xff1a;两种提升规则&#xff1a;取值范围从小到大的关系&#xff1a; 4.隐式转换的练习案例一&#xff1a;案例二&#xff1a;…

Python中如何使用_new_实现单例模式

单例模式是一个经典设计模式&#xff0c;简要的说&#xff0c;一个类的单例模式就是它只能被实例化一次&#xff0c;实例变量在第一次实例化时就已经固定。 在Python中常见的单例模式有None&#xff0c;这就是一个很典型的设计&#xff0c;通常使用 if xxx is None或者if xxx …

【Linux Shell学习笔记】Linux Shell的位置参数与函数

一、位置参数 位置参数&#xff0c;也被称之为位置变量&#xff0c;通过位置参数&#xff0c;可以在执行程序的时候&#xff0c;向程序传递数据 1.1 shell接收参数的方法 1.2 向shell传递参数的方法 二、函数 2.1 函数基础 2.1.1 函数简介 函数本质上就是一个代码块&#xf…

微信小程序开发系列-07组件

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…

碎花连衣裙 I 森系女孩的衣橱

宛如来到了春天&#xff0c;身穿碎花连衣裙的少女 在充满阳光&#xff0c;树叶葱郁的森林里 自由快乐地穿梭&#xff0c;感受着春天的美好 感受着幸福而快乐的童年&#xff01;

10 款顶级的免费U盘数据恢复软件(2024 年 更新)

你曾经遇到过U盘无法访问的情况吗&#xff1f;现在我们教你如何恢复数据。 在信息时代&#xff0c;数据丢失往往会造成巨大的困扰。而USB闪存驱动器作为我们常用的数据存储设备&#xff0c;其重要性不言而喻。但是&#xff0c;U盘也可能会出现各种问题&#xff0c;如无法访问、…

conftest.py 配置

章节目录&#xff1a; 一、概述二、场景说明三、代码示例3.1 最外层3.2 商品模块测试3.3 订单模块测试3.4 用户模块测试3.5 执行结果 四、关于 conftest.py 配置 fixture五、结束语 一、概述 “conftest.py” 是 pytest 测试框架中的一个特殊的配置文件&#xff0c;它能够为整个…

分布式技术之缓存技术

文章目录 什么是分布式缓存&#xff1f;分布式缓存原理Redis 分布缓存原理Memcached 分布式缓存原理对比分析 在计算机领域的各个方面&#xff0c;缓存都非常重要&#xff0c;是提升访问性能的一个重要技术。为什么这么说呢&#xff1f;从单个计算机的体系结构来看&#xff0c;…

【并发设计模式】聊聊等待唤醒机制的规范实现

在多线程编程中&#xff0c;其实就是分工、协作、互斥。在很多场景中&#xff0c;比如A执行的过程中需要同步等待另外一个线程处理的结果&#xff0c;这种方式下&#xff0c;就是一种等待唤醒的机制。本篇我们来讲述等待唤醒机制的三种实现&#xff0c;以及对应的应用场景。 G…