华容网站建设,青岛网站建设哪个好,全屋定制报价明细表,一学一做短视频网站1 shell介绍
1.1 shell脚本的意义 1.记录命令执行的过程和执行逻辑#xff0c;以便以后重复执行 2.脚本可以批量处理主机 3.脚本可以定时处理主机 1.2 脚本的创建
#!/bin/bash # 运行脚本时候执行的环境1.3 自动添加脚本说明信息
/etc/vimrc # vim主配置文件
~/.vimrc # 该…1 shell介绍
1.1 shell脚本的意义 1.记录命令执行的过程和执行逻辑以便以后重复执行 2.脚本可以批量处理主机 3.脚本可以定时处理主机 1.2 脚本的创建
#!/bin/bash # 运行脚本时候执行的环境1.3 自动添加脚本说明信息
/etc/vimrc # vim主配置文件
~/.vimrc # 该用户环境下的文件autocmd BufNewFile *.sh,*.script call NOTE()
func NOTE()call append(0,####################)call append(1,# Author: sxl)call append(2,# Version: )call append(3,# Create_Time: .strftime(%Y/%m/%d))call append(4,################################################)call append(5,#!/bin/bash)
endfunc1.4 执行shell脚本
当脚本没有可执行权限时候
1.4.1 手动在环境中开启指定解释器
sh script.sh1.4.2 直接在当前环境中运行shell中的指令不开启新的shell
source script.sh
. script.sh当脚本有可执行权限时候
1.4.3 开启脚本中指定的shell并使用此shell环境运行脚本中的指令
chmod x script.sh
/xxx/xxx/script.sh
./script.sh1.5 调试
sh -x /mnt/westos.sh # 进入debug模式##运行指令
不带 ##命令运行的输出2 shell变量
2.1 变量的定义
变量就是内存一片区域的地址变量定义的规范性
2.1.1 变量名称 可包含 字母 下划线_ 数字 不能用数字开头 建议
变量名称短全用大写字符
变量名称长用_区分子类
WESTOS
Westos_Linux
westoS_Linux2.2 不同级别的变量设定
2.2.1 环境变量
export a1
在环境关闭后变量失效2.2.2 用户级别
vim ~/.bash_profile
export a12.2.3 系统级别
vim /etc/profile
export a2
vim /etc/profile.d/westos.sh
export b32.3 变量转义
2.3.1 转译
\ #转译单个字符#弱引用批量转译个数字符 不能转译\ $ !#强引用2.3.2 声明变量及其引用
a1
echo ${a}b2.3.3 变量数组的使用
a(1 2 3 4 5)
a$[a[]:起始元素id:元素个数]
echo ${a[0]} ##数组中第一个元素
echo ${a[1]} ##数组中最后一个元素
echo ${a[*]} ##数组中所有元素
echo ${a[]} ##数组中所有元素
echo ${a[]:0:3} ##数组中13个元素
echo ${#a[]} ##数组中元素的个数
unset a[n] ##删除数组中的第n1个元素
unset a ##删除a这个数组2.4 命令的别名设定alias
alias xievim ##临时设定
vim ~/.bashrc
alias xievim ##只针对与用户生效
vim /etc/bashrc ##针对系统所以用户生效
alias xievim
unalias xie ##删除当前环境中的alias2.5 用户环境变量的更改
设定方式
~/.bash_profile # 当前用户环境变量
export PATH$PATH:/mnt
/etc/bash_profile # 整个系统变量
export PATH$PATH:/mnt2.6 直接利用命令执行结果
$()##优先执行
TIMEdate # 范围更广2.7 脚本中的传参
2.7.1 非交互式
非交互模式
$0 is /mnt/test.sh !脚本本身
$1 is westos !脚本后所输入的第一串字符
$2 is linux
$3 is redhat
$* is westos linux redhat !脚本后所输入的所有字符westos linux redhat
$ is westos linux redhat !脚本后所输入的所有字符westos linux redhat
$# is 3 !脚本后所输入的字符串个数2.7.2 交互式
read WESTOS ##对westos赋值
read -p please input word: ##输出提示语
-s ##隐藏输入内容2.8 脚本函数
设定方式
WORD()
{
action1
action2
}
WORD 在脚本中就代表action1 action2这两个动作3 shell编程流程
3.1 for
for i in 1 2 3 4 5 sxl
doecho $i
done
echo ################
for i in seq 1 2 5 # 步长为2
doecho $i
done
echo ################
for i in {1..5}
doecho $i
done
echo ################
for ((i6;i10;i))
doecho $i
done 3.2 条件
3.2.1 while do 3.2.2 until do 3.2.3 if 3.3 case
执行按钮操作点名机制相对于IF语句效率更高
case $1 in
word1|WORD1)
action1
;;
word2|WORD2)
action2
;;
*)
action3
esac3.4 expect
3.4.1 shell应答方式
问题expect.sh
#!/bin/bash
read -p whats your name: NAME
read -p How old are you: AGE
read -p Which objective: OBJ
read -p Are you ok? OK
echo $NAME is $AGE\s old study $OBJ feel $OK回答answer.sh
/root/Desktop/expect.sh EOF
SXL
20
REAHAT
OK
EOF3.4.2 expect应答方式
dnf install expect -y#!/usr/bin/expect
set timeout 1
set NAME [ lindex $argv 0 ]
set AGE [ lindex $argv 1 ]
set OBJ [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]
spawn /mnt/ask.sh
expect {
name { send $NAME\r;exp_continue }
old { send $AGE\r;exp_continue }
objective { send $OBJ\r;exp_continue }
ok { send $FEEL\r }
}
expect eof4 shell运算
4.1 运算符号 ##加法
- ##减法
* ##乘法
/ ##除法
% ##除法后的余数
** ##乘方##自加一
-- ##自减一##小于##小于等与##大于##大于等与##等于ji ##jji
* *##jj*i
/ ##jj/i
% ##jj%i4.2 运算指令
(()) ##((a12))
let ##let a12
expr ##expr 1 2
bc
bc EOF
12
EOF
$[] ##echo $[12]
printf %0.2f .3 0.30
printf %0.3f .3 0.300
printf %0.4f .3 0.30005 脚本练习
5.1 IP采集
ifconfig $* | awk /inet\/{print $2}5.2 日志清理
[ $USER root ]{echo clean ok /var/log/message
}||{echo clean error
} 5.3 采集系统登录用户信息
echo -e hostname:\t$(hostname)
echo -e hostname:\t$HOSTNAME
echo -e username:\t$USER
IP$(ifconfig ens160 | awk /inet\/{print $2})
[ -z $IP ]{echo -e ipaddress:\tNONE
}||{echo -e ipaddress:\t$IP
}5.4 脚本函数创建用户
ACTION()
{read -p please name: NAME[ exit $NAME ]{exit}id $NAME /dev/null {echo user exitACTION}||{echo user not exitread -p please input passwd: PASSWDadduser $NAMEecho $PASSWD | passwd --stdin /dev/null {echo $NAME create ok}ACTION}
}
ACTION 5.5 检测直连网络中可以与主机通信的主机IP
for ip in {50..64}
doping -w 1 -c 1 192.168.1.$ip /dev/null {echo 192.168.1.$ip}
done5.6 用户建立脚本
5.7 系统CPU使用情况
ps ax -o %cpu | awk BEGIN{N0}!/$CPU|0.0/{N$1}END{print %CPU:\tN%}5.8 倒计时
MIN1
SEC60
SECS$[MIN*60SEC]
for ((;SECS0;SECS--))
doMIN$[SECS/60]SEC$[SECS%60]echo -ne $MIN:$SECecho -ne \rsleep 1
done