slacr_

Just to record my life and thoughts.
笔记/编程/杂乱/极简

[Linux]Vim编辑器与shell脚本

Sep 7, 2023Linux2559 words in 17 min

Vim 文本编辑器

  • 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
  • 输入模式:正常的文本录入。
  • 末行模式:保存或退出文档,以及设置编辑环境。

个人觉得主要就两个模式: 编辑和命令, 命令模式 aio 进入编辑模式, 编辑模式 esc 退回命令模式, 末行模式就是退出用于控制退出文件状态的命令, 没什么末行模式, 按esc会清空已经写的命令, 非常好懂啊, 正常的编辑保存文件的流程.

配置主机名称

1
vim etc/hostname

配置网卡信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd /etc/sysconfig/network-scripts/
vim ifcfg-ens160

TYPE=Ethernet
BOOTPORTO=static
NAME=ens160
ONBOOT=yes
IPADDR=192.168.184.129
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=192.168.10.1

nmcli connection reload ens160
ping 192.168.184.129

配置软件仓库

软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。
Yum与dnf软件仓库的配置文件是通用的,也就是说填写好来配置文件信息后,这两个命令都是可以正常使用。建议在8版本系统中使用dnf作为软件的安装命令,具备更高的效率,以及支持多线程同时安装软件的优势。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd /etc/yum.repo.d
vim rhel9.repo

[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0

mkdir -p /media/cdrom
mount /dev/cdrom /media/cdrom
vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0

dnf install httpd -y

编写Shell脚本

简单Shell脚本

1
2
3
4
5
6
7
8
9
10
11
vim eg.sh

#! /bin/bash -> 告诉系统使用哪种shell解释器
# eg for shell scripts -> 脚本介绍
pwd
ls -al

bash eg.sh
# or
chmod u+x eg.sh
./eg.sh

接受用户的参数

linux内设了用于接收参数的变量,变量之间使用空格间隔。例如\ 0对应的是当前Shell脚本程序的名称,\ #对应的是总共有几个参数, *对应的是所有位置的参数值, ?对应的是显示上一次命令的执行返回值,而 1、 2、$3……则分别对应着第N个位置的参数值,

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash"
#test for shell recieve args
echo "当前脚本名称:$0"
echo "总共有$#个参数, 分别是$*"
echo "第一个参数为 1, 第五个参数为 5"

bash test.sh one two three four five six

'''
当前脚本名称:test.sh
总共有6个参数, 分别是one two three four five six
第一个参数为one, 第五个参数为five
'''

判断用户的参数

Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回非零值。

按照测试对象来划分,条件测试语句可以分为4种:
文件测试语句;
逻辑测试语句;
整数值比较语句;
字符串比较语句。

1
2
3
4
5
6
7
8
[ -d /etc/fstab ]
echo $?

[ -f /etc/fstab ]
echo $?

[ -e /dev/cdrom ] && echo "Exist"

&&是逻辑“与”,只有当前面语句执行成功的时候才会执行后面的命令。
是逻辑“或”,只有当前面语句执行失败的时候才会执行后面的命令。
!是逻辑“非”,代表对逻辑测试结果取反值,之前是正确则变错误,错误则变正确。

1
[ $USER = root ] || echo "you are not root"
1
2
3
4
5
[ ! $USER = root ] && echo "yes are not root"
[ $USER != root ] && echo "yes are not root"

[ ! $USER = root ] && echo "user" || echo "root"
# 条件为真, 执行 && 后语句, 条件为假, 执行 || 后语句

整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然地使用日常生活中的等号、大于
号、小于号等来判断。因为等号与赋值命令符冲突,大于号和小于号分别与输出重定向命令符和输入重定向命令符冲突。因此一定要使
用规范的整数比较运算符来进行操作

1
[ 10 -ge 10 ] && echo "yes" || echo "no"
1
2
3
4
FreeMem = `free -m | grep Mem | awk '{print $4}'`
echo $FreeMem

[ $FreeMem -lt 1024 ] && echo "Insufficient Memory"

1
2
3
4
[ -z $SHELL ] 
echo $?

[ ! $LANG = "en_US.UTF-8" ] && echo "no" || echo "yes"

if 条件测试语句

1
2
3
4
5
6
#!/bin/bash
DIR="/media/cdrom"
if [ ! -d $DIR ]
then
mkdir -p $DIR
fi
1
2
3
4
5
6
7
8
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line"
fi

/dev/null 是一个 Linux 和 Unix 系统中的特殊文件,它表示一个黑洞,即一个没有任何内容、不产生任何输出、不接收任何输入的空文件。
这个文件通常用于在执行命令时将其输出重定向到该文件,或者在执行命令时将其输入重定向到该文件,从而防止输出或输入对其他程序产生影响。

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
read -p "Enter your score (0-100): " GRADE
if [ GRADE -gt 100 ] || [ GRADE -lt 1 ] ; then
echo "error input!"
elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi

for 条件循环语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
# 批量添加用户
read -p "Enter The Users Password: " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME, Already exists"
else
useradd $UNAME &> /dev/null
echo " PASSED" | passwd --stdin UNAME &> /dev/null
echo "$UNAME, Create success"
fi
done

while条件循环语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
PRICE= (expr RANDOM % 1000)
TIMES=0
echo "price is between 0 and 999, guess what?"
while true
do
read -p "input your predication: " INT
let TIMES++
if [ INT -eq PRICE ] ; then
echo "congratulations, it's $PRICE"
echo "you totally costs $TIMES times"
exit
elif [ INT -gt PRICE ] ; then
echo "too high"
else
echo "too low"
fi
done

exit 相当于break , 退出循环

case 条件测试语句

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
read -p "请输入一个字符, Enter确认" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "字母"
;;
[0-9])
echo "数字"
;;
*)
echo "其他"
esac

计划任务服务程序

把周期性、规律性的工作交给系统自动完成。

一次性计划任务:今晚23点30分重启网站服务。
长期性计划任务:每周一的凌晨3点25分都把/home/wwwroot目录打包备份为backup.tar.gz。

一次性计划任务只执行一次,一般用于临时的工作需求。用at命令实现这种功能,只需要写成“at 时间”的形式就行。如
果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l ”命令;要想将其删除,可以用“atrm任务序号

默认采用交互式

1
2
3
4
5
6
7
[slacr@bogon ~]$ at -l
warning: commands will be executed using /bin/sh
at> systemctl restart httpd
at> <EOT>
job 1 at Fri Oct 6 23:30:00 2023
[slacr@bogon ~]$ at -l
1 Fri Oct 6 23:30:00 2023 a slacr

通过管道符一次创建

1
2
3
echo "systemctl restart httpd" | at 23:30

echo "systemctl restart httpd" | at now +2 HOUR

还有些时候,我们会希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务简直适
合不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为
“crontab-r”。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。


1
2
3
4
5
6
7
crontab -e

25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*

crontab -l
crontab -r

除了用逗号()来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(一)来表示一段连续
的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如
“*/2”表示每隔2分钟执行一次任务)。

尤其需要注意的是,在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询

其他

RHEL 9.2 快捷键

  • win
  • win + tab 切换应用
  • alt + f2 run a command, gnome-terminal 打开终端

shell script 不要等号两边加空格, 不然会报错, 习惯了空格要注意

中文拼音输入法


找到input Sources 添加 Intelligent Pinyin

win + space 切换输入法

切换终端

第1个虚拟终端(tty1)是图形界面
第2~第6个虚拟终端(tty2~tty6)是字符界面
图形终端–>字符终端:ctrl+Alt+F2~F6
字符终端–>字符终端:Alt+F2~F6
字符终端–>图形终端: 方法1:Alt+F1
方法2:登录后输入startx 方法3:登录后输入init 5

参考

  1. Linux就该这么学
  2. [鸟哥linux基础学习篇4th]
  3. linux命令
  4. 开源许可证总览
  5. LSB标准
  6. 硬盘结构
  7. RHCSA学习
  • Author:

    slacr_

  • Copyright:

  • Published:

    September 7, 2023

  • Updated:

    September 7, 2023

Buy me a cup of coffee ☕.

1000000