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 则为执行失败
$#:位置参数总数
$*:所有的位置参数被看做一个字符串
$@:每个位置参数被看做独立的字符串
引号
""-------------如果引用的是字符串和单引号功能相同,变量的替换
''-------------所见即所得,原封不动引用
``-------------引用命令的结果,等价于$()
[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、变量状态赋值
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
文件测试:
布尔:
-a 与
-o 或
! 非
循环
if语句
单分支
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
多分支
#!/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 ((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