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.hqwc.cn/news/313860.html

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

相关文章

12/31

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;用于密集预测的多路径视觉Transformer1、研究背景2、方法提出3、相关方法3.1、Vision Transformers for dense predictions3.2、C…

数据结构期末复习(fengkao课堂)

学习数据结构时&#xff0c;以下建议可能对您有所帮助&#xff1a; 理解基本概念&#xff1a;首先&#xff0c;确保您理解数据结构的基本概念&#xff0c;例如数组、链表、栈、队列、树、图等。了解它们的定义、特点和基本操作。 学习时间复杂度和空间复杂度&#xff1a;了解如…

【Linux】理解文件系统

需要云服务器等云产品来学习Linux的同学可以移步/–>腾讯云<–/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;优惠多多。&#xff08;联系我有折扣哦&#xff09; 文章目录 1. 了解磁盘1.1 磁盘的物理结构1.2 磁盘的逻辑结构1.3 磁盘的存储结构 2. 文件系统2.…

Nginx服务器中设置禁止访问文件或目录的方法

autoindex off; 规则描述&#xff1a; 如果访问NGINX下的一个web应用&#xff0c;如果输入是一个目录名&#xff0c;而且该目录下没有一个默认访问文件&#xff0c;那么Nginx会将该目录下的所有文件列出来&#xff0c;这种敏感信息泄露是 严格禁止的。Nginx默认的是关闭目录列…

HarmonyOS应用开发-搭建开发环境

本文介绍如何搭建 HarmonyOS 应用的开发环境&#xff0c;介绍下载安装 DevEco Studio 开发工具和 SDK 的详细流程。华为鸿蒙 DevEco Studio 是面向全场景的一站式集成开发环境&#xff0c;面向全场景多设备&#xff0c;提供一站式的分布式应用开发平台&#xff0c;支持分布式多…

【SpringCloud Alibaba笔记】(2)Nacos服务注册与配置中心

Nacos Nacos简介与下载 是什么&#xff1f; 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;就是注册中心&#xff0b;配置中心的组合 Nacos Eureka Config Bus 替代Eureka…

金蝶云星空反写规则表结构同步另一个数据库

文章目录 金蝶云星空反写规则表结构同步另一个数据库在BOS找到《反写规则》的表反写规则相关表创建反写规则&#xff0c;或者已经创建好的反写规则定位反写规则数据导出表数据执行脚本BOS导入数据库直接执行 金蝶云星空反写规则表结构同步另一个数据库 在BOS找到《反写规则》的…

未来的智能:人机环境系统智能

2023年即将过去&#xff0c;2024年即将到来&#xff0c;未来会是怎样的呢&#xff1f;未来的智能又会是怎样的呢&#xff1f;针对这个问题我们不妨展开想象的翅膀憧憬一下&#xff0c;或许可以在不经意中碰上不远后的脚步&#xff01; 随着科技的发展和人工智能的不断进步&…

大数据规模存储的几个核心问题

文章目录 三个关键问题RAID&#xff08;独立磁盘冗余阵列&#xff09;RAID是如何解决关于存储的三个关键问题&#xff1f;水平伸缩 大规模数据存储都需要解决几个核心问题&#xff0c;这些问题都是什么呢&#xff1f; 三个关键问题 1.数据存储容量的问题 既然大数据要解决的…

es简单入门

星光下的赶路人star的个人主页 努力努力再努力 文章目录 1、简介2、使用场景3、基本知识4、中文文档和官网链接5、增删改查&#xff08;php代码&#xff09;6、基本查询7、HTTP操作7.1 索引操作7.1.1 创建索引 7.2 文档操作7.2.1 创建文档7.2.2 查看文档7.2.3 修改文档7.2.4 修…

计算机操作系统(OS)——P5设备管理

1、I/O设备的概念和分类 什么是I/O设备 I/O就是输入/输出&#xff08;Input/Output&#xff09;。 I/O设备就是可以将数据输入到计算机&#xff0c;或者可以接收计算机输出数据的外部设备&#xff0c;属于计算机中的硬件部件。 UNIX系统将外部设备抽象为一种特殊的文件&#x…

数据结构--队列【详解】~(˶‾᷄ꈊ‾᷅˵)~

目录 队列定义&#xff1a; 队列的声明与头文件的包含&#xff1a; 队列的声明&#xff1a; 头文件的包含&#xff1a; 队列的基本操作: 初始化队列 : 摧毁队列&#xff1a; 入队列&#xff1a; 出队列&#xff1a; 返回队头数据&#xff1a; 返回队尾数据&#xff1…