shell自动化编程

文章详细介绍了Linuxshell脚本的基本元素,包括脚本的构成、执行方式以及bashshell的功能。重点讲解了echo和printf命令的使用,历史命令的管理,命令别名的设定,以及命令执行顺序和管道符的应用。此外,还提到了exit退出程序及其状态码的相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章 shell 

一、shell脚本的基本元素

1.1 基本元素构成 :

  • 第一行 '#!/bin/bash"
  • 注释 :说明某些代码的功能
  • 可执行语句:实现程序的功能

1.2shell脚本:

  • shell脚本文件名应见名知意,扩展名为sh,如:file.sh
  • shell没有强制要求,但是建议缩进,这样可以提高阅读性,程序更有层次感
  • 例题:99乘法表
[root@server ~]# vim 99.sh


#!/bin/bash
for (( i=1; i<10; i++ ))
do
        echo  -ne  "$i\t"
done

echo

for (( i=1; i<70; i++ ))
do
        echo -n "="
done

echo

for (( i=1; i<10; i++  ))
do
        for (( j=1; j<=i; j++ ))
        do
                echo -en "$i*$j=$[i*j]\t"
        done
        echo
done

1.2.1shell脚本的执行

  • 方法一:

使用sh或bash命令执行脚本,不需要执行权限(建议使用),脚本中不需要指定脚本解释器

[root@server ~]# bash 99.sh

  • 可以使用bash -n 脚本名.sh ,进行语法检错,且不执行脚本
  • 方法二:

切换到脚本所在目录使用./执行脚本,但是需要增加权限

[root@server ~]# chmod +x 99.sh   #增加权限
[root@server ~]# ./99.sh
  • 方法三:

使用 . 或source执行脚本,不需要执行权限

[root@server ~]# .  99.sh
[root@server ~]# source 99.sh
  • 注意 

方法一、二都是启动一个子shell,在子shell中执行脚本,脚本中设置的变量在脚本执行完毕后不会保存

方法三是在当前shell执行的,不需要启动一个子shell,脚本中设置变量在执行完毕后会保存下来

1.3 bash shell 基本功能

1.3.1 echo 打印命令

  • 格式:echo -参数 内容
  • 参数

        1. -n :取消输出后行末的换行符号

        2.-e :启用转义符

  • 可以输出带颜色的字体 :

        1.格式:echo -e "\e[字体控制;字体背景或背景颜色 字符串内容  \e[0m"

        2. \e[表示控制开始,\e[0m表示控制结束

        3.字体控制选项 :1表示高光,4表示下划线,5颜色闪朔

        4.颜色如下:字颜色:30-37,背景色:40-47

[root@server ~]# vim yanse.sh

#!/bin/bash
echo -e "\e[30m 黑色字\e[0m"
echo -e "\e[1;31m 红色字\e[0m"
echo -e "\e[32m 绿色字\e[0m"
echo -e "\e[33m 黄色字\e[0m"
echo -e "\e[34m 蓝色字\e[0m"
echo -e "\e[35m 紫色字\e[0m"
echo -e "\e[36m 天蓝色字\e[0m"
echo -e "\e[37m 白色字\e[0m"
echo -e "\e[40;37m 黑底白字\e[0m"
echo -e "\e[41;37m 红底白字\e[0m"
echo -e "\e[42;37m 绿底白字\e[0m"
echo -e "\e[43;37m 黄底白字\e[0m"
echo -e "\e[44;37m 蓝底白字\e[0m"
echo -e "\e[45;37m 紫底白字\e[0m"
echo -e "\e[46;37m 天蓝底白字\e[0m"
echo -e "\e[47;30m 白底黑字\e[0m"
~                               

[root@server ~]# bash yanse.sh

1.3.2 printf 命令

格式:

printf   格式控制字符串   参数列表

  • 示例
[root@server ~]# printf "Hello shell\n"
Hello shell
[root@server ~]# printf "%d %s\n" 1 "abc"
1 abc
[root@server ~]# printf %s abcdef
abcdef[root@server ~]# 
[root@server ~]# printf "%-10s %-8s %-4s\n"  姓名 性别 体重kg
姓名     性别   体重kg

[root@server ~]# printf "%-10s %-8s %-4.2f\n" 张三  男  66.333
张三     男      66.33

%s  %c %d %f 都是格式代替符,%s 输出一个字符串,%d整形输出,%c 输出一个字符,%f 输出实数,以小数的形式输出

%-10s 指一个宽度为10个字符 (- 表示左对齐,没有则表示右对齐),任何字符都会被显示在10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

1.3.3 histroy 历史命令

  • 格式 :

history [参数] [历史命令保存文件]

参数

 1.-c : 清空历史记录

 2. -w :把缓存中的历史命令写入历史命令保存文件。如果不手工指定历史命令保存文件,则放入历史命令保存文件~/.bash_history 中

[root@server ~]# vim /etc/profile

HISTSIZE=1000   #可以修改值

[root@server ~]# reboot    #重启生效
  • 面试题:显示history历史命令出现次数最高的top 10
[root@server ~]# history | tr -s " " |cut -d " " -f3 |sort |uniq -c | sort -nr | head -10
     59 vim
     48 ls
     43 cd
     31 ll
     25 echo
     22 cat
     16 find
     12 bash
     11 date
     10 yum

#浏览历史命令 | 压缩为1个空格 | 截取以空格为间隔符的第三部分 | 排序 |统计并去重 | 降序排序
  • 面试题:增加history显示的信息,如:历史命令执行的时间

[root@server ~]# vim /root/.bashrc  #编辑配置文件

#最后一行添加新行增加如下内容:
export HISTTIMEFORMAT="%Y-%m-%d %H-%M-%S: "


[root@server ~]# source ~/.bashrc    #执行配置脚本,刷新配置
[root@server ~]# history     #测试
    1  2023-07-18 08-34-32: ifconfig
    2  2023-07-18 08-34-32: touch a
    3  2023-07-18 08-34-32: ls

1.3.4 命令与文件补全 :tab

1.3.5 命令别名

  • 格式 :alias 别名=原命令
  • 例如:
[root@server ~]# alias hi=history
[root@server ~]# hi
  • 注意:别名的优先级比命令高,命令执行时的顺序如下
  1.     第一顺位:执行用绝对路径或相对路径执行命令
  2.     第二顺位 :执行别名
  3.     第三顺位 :执行Bash 的内部命令
  4.     第四顺位 :执行按照$PATH 环境变量定义的目录查找顺序找到的第一个命令。   
  •  为了让这个别名永久生效,可以把别名写入环境变量配置文件”~/.bashrc“
[root@server ~]# vim ~/.bashrc
#最后面添加
alias hi=history

1.3.6 命令执行顺序

  • 顺序执行 : ;
[root@server ~]# date ; ls -l /etc/passwd
Tue Jul 18 07:15:01 PM CST 2023
-rw-r--r-- 1 root root 2475 Jul 14 18:01 /etc/passwd
  • 前面命令执行不成功,后面命令不执行 :&& (前面命令执行成功,后面命令执行)
[root@server ~]# mkdir /file && echo 123 > file4
  • 前面命令成功,后面就不执行,如果前面不成功后面就执行: ||
[root@server ~]# mkdir tt || ls /
[root@server ~]# mkdir tt || ls /   #可以再次执行

 1.3.7 管道符

  • 符号: |,当在两个命令之间设置管道符时,管道符 | 左边命令的输出就变成右边命令的输入。只要第一个命令向标准输出写入,二第二个命令是从标志输入读取,那么这两个命令就可以形成一个管道
  • 面试题:提取网卡的IP地址
[root@server ~]# ip a | grep ens160 | grep inet | cut -d "/" -f1 | tr -s " " |cut -d " " -f3
192.168.145.128
  • 面试题:显示内存的剩余容量
[root@server ~]# free -h
               total        used        free      shared  buff/cache   available
Mem:           1.7Gi       831Mi       508Mi        15Mi       576Mi       912Mi
Swap:          1.9Gi          0B       1.9Gi

[root@server ~]# free -h | grep Mem | tr -s " " | cut -d " " -f4
508Mi
[root@server ~]# free -h | grep Mem | awk '{print $4}'
508Mi

1.3.8 exit退出程序

  • 作用:终止shell程序执行
  • 格式:exit 状态码
  • 状态码 :该参数是一个整数值,其取值范围为0-255
  • 注意:shell 程序的退出状态码储存在系统变量$?中,因此,用户可以通过该变量取得shell程序返回父进程的退出状态码
  • 常见状态码
    0------------------------命令运行成功
    1------------------------通知未知错误
    2------------------------误用shell命令
    126----------------------命令不可执行
    127----------------------没有找到命令
    128----------------------无效退出
    128+x--------------------Linux信号x的严重错误
    130----------------------命令通过ctrl+c终止
    255----------------------退出状态码越界

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值