欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 运维高级课一

运维高级课一

2025/4/22 2:23:02 来源:https://blog.csdn.net/Ruimin0519/article/details/145077264  浏览:    关键词:运维高级课一

shell

自动增加版权信息

vim ~/.vimrc

autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()if expand("%:e") == 'sh'call setline(1,"#!/bin/bash")call setline(2,"#########################")call setline(3,"#File name:".expand("%"))call setline(4,"#Version:v1.0")call setline(5,"#Email:admin@test.com")call setline(6,"#Created time:".strftime("%F %T"))call setline(7,"#Description:")call setline(8,"#########################")call setline(9,"")endif
endfunc

变量

弱,不需要实现,直接可以使用

核心:变量名等于变量值

           标识符的命名要求

           驼峰原则   小:logPath   大:LogPath

           下划线       log_path

1>linux配置jdk

首先下载好需要的jdk包

1、把tar包上传到linux上后,解压

[root@openEuler-1 ~]# mkdir /usr/java
[root@openEuler-1 ~]# cd /root
[root@openEuler-1 ~]# ls
anaconda-ks.cfg
[root@openEuler-1 ~]# ls
anaconda-ks.cfg  jdk-8u60-linux-x64.tar.gz
[root@openEuler-1 ~]#  yum install tar -y
Last metadata expiration check: 1:03:01 ago on Sat 11 Jan 2025 03:13:10 PM CST.
Package tar-2:1.34-5.oe2203sp4.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@openEuler-1 ~]# tar xf jdk-8u60-linux-x64.tar.gz -C /usr/java

2、配置环境变量

vim /etc/profile

模块化,在环境变量中要求要以.sh结尾

[root@openEuler-1 ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_60/
export JRE_HOME=/usr/java/jdk1.8.0_60/jre
export CLASS_PATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

3、使终端生效

source /etc/profile.d/java.sh / . /etc/profile.d/java.sh

2>位置变量 

$1...${10}

3>特殊变量

$0: 脚本名称

$?: 上一条命令是否执行成功,0 为执行成功,非 0 则为执行失败

$#:位置参数总数

$*:所有的位置参数被看做一个字符串

$@:每个位置参数被看做独立的字符串

$$ :当前进程 PID
$! :上一条运行后台进程的 PID

引号

""-------------如果引用的是字符串和单引号功能相同,变量的替换
''-------------所见即所得,原封不动引用
``-------------引用命令的结果,等价于$()

[root@openEuler-1 ~]# echo "Hello,world!" 
Hello,world!
[root@openEuler-1 ~]# echo 'Hello,world!' 
Hello,world!
[root@openEuler-1 ~]# echo Hello,world!
Hello,world!
[root@openEuler-1 ~]# echo "Hello,$USER."
Hello,root.
[root@openEuler-1 ~]# echo 'Hello,$USER.'
Hello,$USER.
[root@openEuler-1 ~]# echo "Hello,`whoami`."
Hello,root.

字符串

1、求长度

[root@openEuler-1 ~]# VAR='hello world!'
[root@openEuler-1 ~]# echo ${#VAR}
12
[root@openEuler-1 ~]# VAR='hello world! i am Ruimin'
[root@openEuler-1 ~]# echo ${#VAR}
24
 

2、切片

格式:
${parameter:offset}
${parameter:offset:length}

截取从 offset 个字符开始,向后 length 个字符。

[root@openEuler-1 ~]# echo ${VAR:2}
llo world! i am Ruimin
[root@openEuler-1 ~]# echo ${VAR:2:4}
llo
[root@openEuler-1 ~]# echo ${VAR:4}
o world! i am Ruimin
[root@openEuler-1 ~]# echo ${VAR::4}
hell
[root@openEuler-1 ~]# 

3、变量状态赋值

${VAR:-string} 如果 VAR 变量为空则返回 string
${VAR:+string} 如果 VAR 变量不为空则返回 string
${VAR:=string} 如果 VAR 变量为空则重新赋值 VAR 变量值为 string
${VAR:?string} 如果 VAR 变量为空则将 string 输出到 stderr

4、颜色显示

格式:
\033[1;31;40m # 1 是显示方式,可选。31 是字体颜色。40m 是字体背景颜色。
\033[0m # 恢复终端默认颜色,即取消颜色设置。

echo默认会换行

[root@openEuler-1 ~]# echo hello
hello
[root@openEuler-1 ~]# echo -n hello
hello[root@openEuler-1 ~]# 
 

表达式

[] [[]] test

[ ]的左右必须要加空格

整数:
    eq--相等
    ne--不等
    lt--小于
    gt--大于
    le--小于等于
    ge--大于等于
    
字符串:
    ==
    !=
    -n  长度不为0
    -z  长度为0
    

文件测试:

-e         文件或目录存在为真         [ -e path ] path 存在为 true
-f          文件存在为真                    [ -f file_path ] 文件存在为 true
-d         目录存在为真                    [ -d dir_path ] 目录存在为 true


布尔:
    -a 与
    -o 或
    ! 非

循环

if语句

格式:if list; then list; [ elif list; then list; ] ... [ else list; ] fi
单分支

1、判断脚本执行是否是root用户

[root@openEuler-1 scripts]# #判断脚本执行是否是root用户
[root@openEuler-1 scripts]# whoami
root
[root@openEuler-1 scripts]# echo $USER  #1、字符串比较
root
[root@openEuler-1 scripts]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@openEuler-1 scripts]# echo $UID   #2、root用户的UID=0
0 
[root@openEuler-1 scripts]# vim +  l1.sh
if [ "${whoami}" != "root" ]
thenecho "请使用root用户来运行脚本。"exit 2
fi[root@openEuler-1 scripts]# bash l1.sh
请使用root用户来运行脚本。
[root@openEuler-1 scripts]# echo $?
2
[root@openEuler-1 scripts]# vim +  l2.sh
if [ $UID -ne 0 ]
thenecho "请使用root用户来运行脚本。"exit 2
fi[root@openEuler-1 scripts]# bash l2.sh
[root@openEuler-1 scripts]# echo $?
0    #正常运行了,所以应该是0[root@openEuler-1 ~]# useradd tom
[root@openEuler-1 ~]# su - tom
[tom@openEuler-1 ~]$ whoami
tom
[tom@openEuler-1 ~]$ echo $UID
1000
[tom@openEuler-1 ~]$ bash /server/scripts/l2.sh 
请使用root用户来运行脚本。
[tom@openEuler-1 ~]$ echo $?
2

2、判断crond进程是否进行

[root@openEuler-1 scripts]# ps -ef | grep crond | grep -vc grep
1
[root@openEuler-1 scripts]# ps -ef | grep nginx | grep -vc grep
0  #未启动
[root@openEuler-1 scripts]# systemctl start nginx
[root@openEuler-1 scripts]# ps -ef | grep nginx | grep -vc grep
3
[root@openEuler-1 scripts]# 
[root@openEuler-1 scripts]# vim + l3.sh

NAME=nginx
NUM=$(ps -ef | grep nginx | grep -vc grep)if [ $NUM -ge 1 ]
thenecho "$NAME is running ..."
elseecho "$NAME is not running ..."
fi

[root@openEuler-1 scripts]# systemctl stop nginx
[root@openEuler-1 scripts]# bash l3.sh
nginx is not running ...

其他方法

[root@openEuler-1 scripts]# systemctl start nginx
[root@openEuler-1 scripts]# systemctl is-active nginx
active
[root@openEuler-1 scripts]# systemctl stop nginx
[root@openEuler-1 scripts]# systemctl is-active nginx
inactive

多分支
if 条件表达式; then
命令
else
命令
fi
#!/bin/bash
N=10
if [ $N -lt 5 ]; then
echo yes
else
echo no
fi
# bash test.sh
no

for语句

单层循环

for 变量名 in 取值列表;do

命令

done

[root@openEuler-1 scripts]# vim + l6.sh

#for v in 1 2 3 4 5 7 8 9 10
for v in {1..10}
doecho $v
done


[root@openEuler-1 scripts]# bash l6.sh
1
2
3
4
5
6
7
8
9
10
 

生成一个序列

seq 10     seq 1 2 10    seq 0 2 10

[root@openEuler-1 scripts]# seq 1 2 10
1
3
5
7
9
[root@openEuler-1 scripts]# seq 0 2 10
0
2
4
6
8
10

echo{1..10}

for 循环还有一种 C 语言风格的语法,常用于计数、打印数字序列:
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
for ((i=1;i <= 100; i++))
do
let sum+=i
doneecho "1+2+3+ ... +100 = $sum"

检查多个域名是否可以访问

[root@openEuler-1 scripts]# curl -o /dev/null -s -w %{http_code} http://www.taobao.com
301[root@openEuler-1 scripts]# 

双层循环

先把数据库建立好

查询数据库

[root@openEuler-1 scripts]# mysql -e "show databases"
+--------------------+
| Database           |
+--------------------+
| company            |
| goods              |
| information_schema |
| jiaowu             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
 

筛选

[root@openEuler-1 scripts]# mysql -e "show databases" | egrep -v "information_schema|performance_schema|mysql|sys"
Database
company
goods
jiaowu
 

分库

vim bak_v1.sh

DB="information_schema|performance_schema|mysql|sys"
db=$(mysql -N -e "show databases" | egrep -v $DB)[ -d /server/db ] || mkdir -p /server/dbfor v in $db
domysqldump -B $v > /server/db/${v}_$(date +%F).sql
done

bash bak_v1.sh

[root@openEuler-1 scripts]# ls /server/db -lh
total 36K
-rw-r--r-- 1 root root 5.4K Jan 11 21:07 2025-01-11.sql
-rw-r--r-- 1 root root 3.9K Jan 11 21:09 company_2025-01-11.sql
-rw-r--r-- 1 root root 4.7K Jan 11 21:09 goods_2025-01-11.sql
-rw-r--r-- 1 root root 5.4K Jan 11 21:09 jiaowu_2025-01-11.sql
-rw-r--r-- 1 root root 5.4K Jan 11 21:05 %.sql
 

分表

[root@openEuler-1 scripts]# mysql -N -e "show tables from goods"
+---------+
| admin   |
| form    |
| product |
+---------+
[root@openEuler-1 scripts]# mysql -N -e "show tables from company"
+------+
| dept |
|  emp |
+------+
[root@openEuler-1 scripts]# 
 

DB="information_schema| performance_schema|mysql|sys"db=$(mysql -N -e "show databases" | egrep -v $DB)for v in $db
do
bak_path=/server/db/$v
[ -d ${bak_path} ] | | mkdir -p ${bak_path}
mysqldump -B $v > ${bak_path}/${v}_$(date +%F).sql
tb=$(mysql -N -e "show tables from $v")for m in $tb
do
mysqldump $v $m > $bak_path/${v}_${m}_$(date +%F).sql
donedone

[root@openEuler-1 scripts]# sh bak_v2.sh
[root@openEuler-1 scripts]# tree /server/db/
/server/db/
├── 2025-01-11.sql
├── company
│   ├── company_2025-01-11.sql
│   ├── company_dept_2025-01-11.sql
│   └── company_emp_2025-01-11.sql
├── company_2025-01-11.sql
├── company_dept_2025-01-11.sql
├── company_emp_2025-01-11.sql
├── goods
│   ├── goods_2025-01-11.sql
│   ├── goods_admin_2025-01-11.sql
│   ├── goods_form_2025-01-11.sql
│   └── goods_product_2025-01-11.sql
├── goods_2025-01-11.sql
├── goods_admin_2025-01-11.sql
├── goods_form_2025-01-11.sql
├── goods_product_2025-01-11.sql
├── jiaowu
│   ├── jiaowu_2025-01-11.sql
│   ├── jiaowu_courses_2025-01-11.sql
│   ├── jiaowu_scores_2025-01-11.sql
│   ├── jiaowu_students_2025-01-11.sql
│   └── jiaowu_tutors_2025-01-11.sql
├── jiaowu_2025-01-11.sql
├── jiaowu_courses_2025-01-11.sql
├── jiaowu_scores_2025-01-11.sql
├── jiaowu_students_2025-01-11.sql
├── jiaowu_tutors_2025-01-11.sql
└── %.sql

3 directories, 26 files
 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词