Shell 脚本编程1(常用命令+概述)
shell:命令解释器,将我们一直以来使用的命令翻译成机器可以懂得指令,让其执行。
脚本:可以运行的文本就是脚本。
编程:将已经学习过得命令,按照一定顺序(流程控制)组合起来,批量执行。
1. 常用命令
1.1 设置主机名
方式1:修改 /etc/hostname 文件,在文件中写入主机名称
vim /etc/hostname
# 添加如下内容
openEuler
# 保存退出
方式2:使用hostname 命令修改
#格式
hostnamectl set-hostname 主机名称# 修改主机名称
[root@localhost ~]# hostnamectl set-hostname OpenEuler
方式3:脚本传参
shell脚本中可以使用$num表示调用传入的第几个参数,参数之间使用空格进行间隔的。
以下脚本用于设置虚拟机的名称
echo $1 > /etc/hostname
echo "你传入的第一个参数是:"$1# 在运行此脚本的时候 $1就表示 第一个参数 如果有多个参数 依次以$2 $3 $4...表示
# 改脚本还可以改为
hostnamectl hostanme $1
echo "你传入的第一个参数是:"$1
1.2 nmcli
格式
nmcli [OPTIONS] OBJECT { COMMAND | help }
查看网卡名称
nmcli [OPTIONS] OBJECT { COMMAND | help }
设置IP地址为150
[root@server ~]# nmcli c modify ens32 ipv4.addresses 192.168.72.150/24 ipv4.method manual ipv4.dns 114.114.114.114
[root@server ~]# nmcli c modify ens32 ipv4.gateway 192.168.72.2
[root@server ~]# nmcli c modify ens32 autoconnect yes
[root@server ~]# nmcli c up ens32
增加ip
[root@server ~]# nmcli c modify ens32 +ipv4.addresses 192.168.72.151/24
[root@server ~]# nmcli c up ens32
1.3 echo
作用
echo是用于终端打印的基本命令,默认情况下,echo 在每次调用后会添加一个换行符
示例
echo参数选项 | 说明 |
---|---|
-n | 不换行输出内容 |
-e | 解析转义字符 |
示例
# -n输出内容并且内容之后不换行
[root@22222 ~]# echo -n hhahaha
hhahaha[root@22222 ~]## -e 对转义符进行转义
[root@22222 ~]# echo "i\nam\nyour\nteacher\n"
i\nam\nyour\nteacher\n
[root@22222 ~]# echo -e "i\nam\nyour\nteacher\n"
i
am
your
teacher
[root@server ~]# echo -n i have a cat[root@server ~]# echo i\thave\ta\tcat[root@server ~]# echo -e i\thave\ta\tcat[root@server ~]# echo -e "i\thave\ta\tcat"
1.4 export
- export命令用于设置或者显示环境变量
[root@server ~]# mingzi=hehe
[root@server ~]# echo $mingzi
hehe# 进入子shell
[root@server ~]# bash
[root@server ~]# echo $mingzi
# 返回父shell
[root@server ~]# exit
exit[root@server ~]# export mingzi
# 进入子shell
[root@server ~]# bash
[root@server ~]# echo $mingzi
hehe
# 导出环境变量将普通变量name升级为环境变量
[root@22222 ~]# name=liuyinghao
[root@22222 ~]# echo $name
liuyinghao
[root@22222 ~]# export name
[root@22222 ~]# zsh
[root@22222]~# echo $name
liuyinghao# 直接使用export创建环境变量
[root@22222 ~]# export name=heroliu
[root@22222 ~]# echo $name
heroliu
[root@22222 ~]# zsh
[root@22222]~# echo $name
heroliu
[root@22222]~# bash
[root@22222 ~]# echo $name
heroliu
1.5 read
作用
read 命令可从标准输入读取字符串等信息,然后传递给shell程序内部定义的变量使用。
read 是一个重要的 bash 命令,用于从键盘或标准输入读取文本,我们可以使用 read 命令以交互形式读取来自用户的输入,当然 read 能做的远不止这些。
通常我们按下回车键表示命令输入完成,但是很特殊情况下,我们需要基于字符数或者特定字符来表示命令输入完成
语法
read [选项]
常用选项:
-a 读取的内容存入数组
-d 持续读取直到读入 DELIM 变量中的第一个字符,而不是换行符
-i 用于给变量一个默认值
-k 用于读取指定数量的键盘输入内容
-n/N 读取N个字符
-p 指定提示信息,用于等待输入
-r 不允许反斜杠转义任何字符
-s 从标准输入中读取密码而不在屏幕上显示输入的字符
-t 设置读取输入的超时时间,单位为秒
示例
# 1. 读取单个或多个变量
[root@server ~]# read a[root@server ~]# echo $a[root@server ~]# read a b c [root@server ~]# echo $a $b $c# 2. 将读取的数据存入数组中
[root@server ~]# read -a array[root@openEuler ~]# echo ${array[@]}[root@openEuler ~]# echo ${array[0]}[root@openEuler ~]# echo ${array[1]}# 3. 显示输入提示符
[root@server ~]# read -p "please input your name: " name
[root@server ~]# echo $name# 4. 显示输入提示符且设置读取超时
[root@server ~]# read -t 10 -p "please input your name:" name[root@server ~]# echo $name# 5. 读取N个字符
[root@server ~]# read -n 3 -p "please input content:" answer
[root@server ~]# echo $answer# 6. 用读取一个定长的验证码
[root@server ~]# read -k 6 -p "请输入6位验证码: " code
[root@server ~]# echo $code# 7. 提示用户输入年份,如果用户不输入则使用默认值
[root@server ~]# read -i 2025 -p "请输入当前所处的年份(默认为2025): " year
[root@server ~]# echo "当前年份是: $