2021-07-06
运维
0

目录

vim
删除相关
移动相关
替换相关
ssh
shell
echo 和 定义参数
条件判断
循环语句
函数
运行时的脚本参数
网络

当今计算机技术日新月异,Linux系统越来越受到人们的欢迎。与此同时,Linux命令行也成为了掌握Linux系统的必备技能之一。无论是系统管理员、开发人员还是普通用户,学习Linux命令行都能够帮助他们更好地管理和使用Linux系统。

本篇主要介绍vim、ssh、shell、网络的相关命令。

vim

以下操作均在交互状态下进行

删除相关

bash
x # 删除一个单词(删除的文本,可以用p粘贴) dd # 删除一行(删除的文本,可以用p粘贴) 2dd # 删除两行,以此类推(删除的文本,可以用p粘贴)

移动相关

bash
0 # 移动至行首 shift+$ # 移动至行尾 gg # 跳转至第一行 2gg # 跳转至第二行 shift+g # 跳转至最后一行

替换相关

bash
:s/test1/test2 # 替换光标所在行的第一个tes1为tes2 :s/test1/test2/g # 替换光标所在行的所有test1为test2 :1,2 s/test1/test2/g # 替换第一行至第二行的所有test1为test2 :%s/test/file # 替换所有test为file

ssh

ssh配置路径:/etc/ssh/ssh_config,修改过后,不需要重启

Host:别名 HostName:远程主机名(或IP地址) Port:连接到远程主机的端口 User:

ssh局部文件:如/root/.ssh/config,配置后,运行命令:ssh imooc 即可连接

Host imooc HostName 129.211.61.3 Port 22 User root

sshd配置路径:/etc/ssh/sshd_config,修改过后,需要重启使得配置生效:systemctl restart sshd

Port:sshd服务端口号(默认是22) PermitRootLogin:是否允许以root用户身份登录(默认是可以) PasswordAuthentication:是否允许密码验证登录(默认是可以) PubkeyAuthentication:是否允许公钥验证登录(默认是可以) PermitEmptyPasswords:是否允许空密码登录(不安全。默认不可以)

shell

echo 和 定义参数

echo

shell
echo -e "a1\na2" # 换行需要使用\n,并且带上参数-e echo '$message' # 单引号会输出纯文本,为$message echo "$message" # 双引号会输出变量

定义参数

shell
message='abc' # 定义参数 message=$'ab\'c' # 可以在内容里面使用',需要使用\'进行转义,而且需要加上$符号 message=`pwd` # 使用反引号可以定义,被执行的命令

定义数组

shell
array=('value0' 'value1' 'value2') # 定义数组 array[5]='value6' # 定义数组任意位置的内容 echo ${array[2]} # 输出数组任意位置的值 echo ${array[*]} # 输出数组的所有值

全局参数

bash
env # 查看全局变量参数 vim /etc/bashrc # 可以定义全局变量 vim ~/.bashrc # 定义用户的局部变量(优先级比 /etc/bashrc 要低) # 备注:修改完配置文件后,需要source加载一下

read

bash
# 参数: # -p:用户输入提示 # -n:限制输入字数 # -t:限制输入时间 # -s:隐藏输入内容 read firstname lastname # 定义用户输入变量 read -p 'Please enter your name:' firstname lastname # 添加用户输入时的提示

运算

shell
#!/bin/bash let "a=1" let "b=2" let "c=a+b" echo $c

条件判断

shell
#!/bin/bash name1='Eric' name2='Aric' name3='Fric' if [ $name1 = $name2 ] # 判断语句,一个=即可 then echo "same name2!" elif [ $name1 = $name3 ] then echo "same name3!" else echo "no same name!" fi # 结束
shell
# 测试字符串 $string1 = $string2 # 两个字符串是否相等 $string1 != $string2 # 两个字符串是否不同 -z $string # 字符串是否为空 -n $string # 字符串是否不为空 # 测试数字 $num1 -eq $num2 # 两个数字是否相等 $num1 -ne $num2 # 两个数字是否不同 $num1 -lt $num2 # 数字num1是否小于num2 $num1 -le $num2 # 数字num1是否小于或等于num2 $num1 -gt $num2 # 数字num1是否大于num2 $num1 -ge $num2 # 数字num1是否大于或等于num2 # 测试文件 -e $file # 文件是否存在 -d $file # 文件是否是一个目录 -f $file # 文件是否是一个文件 -L $file # 文件是否是一个符号链接 -r $file # 文件是否可读 -w $file # 文件是否可写 -x $file # 文件是否可执行 $file1 -nt $file2 # 文件file1是否比文件file2更新 $file1 -ot $file2 # 文件file1是否比文件file2更旧 # &&和 ||和 ! if [ -e $file1 ] && [ $num1 = 10 ] if [ ! -e $file1 ] && [ $num1 = 10 ]

循环语句

shell
# while循环 while [ $num1 -ge 10 ] && [ $num1 -le 20 ] do let "num1=num1+1" echo "is $num1" done # for循环 # 案例1:循环打印值 for i in 'dog' 'cat' 'pig' do echo "Animal:$i" done # 案例2:循环打印数组的值 arr=('value0' 'value1' 'value2') for i in ${arr[@]} do echo $i done # 案例3:拷贝符合条件的文本 for i in `ls` do if [ $i = 'index.html' ] then cp $i $i-copy fi done # seq # 案例1:循环打印1~10 for i in `seq 1 10` do echo $i done # 案例2:循环打印1,3,5,7,9 for i in `seq 1 2 10` do echo $i done

函数

shell
# 常规使用 function print(){ # 定义函数 echo "print 123456" } print # 执行函数 # 传递参数 function print(){ echo "print $1" # 打印第一个参数 } print $num1 # 使用num1做为print函数的第一个参数 # 返回值 只能返回数字 function print(){ return 100 # 返回100 } print # 执行函数 echo $? # 使用上一个函数的返回值 # 函数局部变量 function print(){ local inner_str='str1' # 定义局部变量 echo $inner_str # 输出局部变量的值 } print echo $inner_str # 输出空,因为全局没有定义该值

运行时的脚本参数

运行脚本:./test.sh a1 a2 a3

test.sh

shell
#!/bin/bash echo "$0 $# $1 $2 $3

输出结果:./test.sh 3 a1 a2 a3

  • $0 脚本名称
  • $# 参数个数
  • $1 第一个参数
  • $2 第二个参数(以此类推)

shift 跳过参数,常用于循环中

shell
echo "$0 $# $1 $2 $3" shift echo "$1" # 此时$1将会输出$2的内容

网络

修改配置文件:vim /etc/sysconfig/network-scripts/ifcfg-enp0s3

说明:BOOTPROTO=dhcp 自动分配IP 示例: BOOTPROTO=static 设置静态IP IPADDR=192.168.56.111 静态IP地址(网段需要一致,192.168.56需要固定,111可以随意填写) NETMASK=255.255.255.0 子网掩码设置

需要执行 systemctl restart network 进行重启

这样IP地址就会被更换,但是会没有网络,还需要添加DNS和网关地址

如下: BOOTPROTO=static IPADDR=192.168.56.111 NETMASK=255.255.255.0 PREFIX=24 GATEWAY=192.168.0.1 DNS1=192.168.0.1

需要执行 systemctl restart network 进行重启

如果遇到问题,可以通过route和route -n定位问题

本文作者:BARM

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!