LINUX——shell编程

Shell 简介

Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理, Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。 下面是流程示意图:

 

第一个 Shell 脚本 

用 vi 打开 test.sh,编写:

 # vi test.sh

#!/bin/bash

echo "Hello world!"

 方法 1:直接用 bash 解释器执行

 # bash test.sh Hello world!

方法 2:添加可执行权限

 # ll test.sh

-rw-r--r--. 1 root root 32 Aug 18 01:07 test.sh

# chmod +x test.sh

# ./test.sh

-bash: ./test.sh: Permission denied

# chmod +x test.sh

# ./test.sh

# ./在当前目录

Hello world!

方法 3:source 命令执行,以当前默认 Shell 解释器执行 

 # source test.sh

Hello world!

 Shell 变量

系统变量

 普通变量与临时环境变量

普通变量定义:VAR=value

临时环境变量定义:export VAR=value

变量引用:$VAR

特殊变量

 

 变量引用

 条件表达式

 整数比较符

 字符串比较符

文件测试

布尔运算符

逻辑判断符

整数运算

Shell 括号用途总结

实验

前提准备

shell脚本的书写规范

  • 通常情况下,我们会给shell脚本起名为filename.sh

#编辑.sh文件时自动生成关于脚本文件说明的注释
[root@localhost ~]# cat /root/.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")      #shell版本
     call setline(5,"#Email:admin@test.com")   #作者Email
     call setline(6,"#Created time:".strftime("%F %T"))   #创建时间
     call setline(7,"#Description:")   #当前文件备注
     call setline(8,"#########################")
     call setline(9,"")
  endif
endfunc

1、写一个脚本,给脚本传递两个参数,显示两者之和和两者之积

第一步 创建shell文件的存储目录

[root@localhost /]# mkdir scripts

第二步 创建num.sh文件,编写文件

[root@localhost scripts]# vim num.sh 
 

#!/bin/bash               #编译脚本配置
##############################################################
# File Name: num.sh       #文件名字
# Version: V1.0                #编译版本
# Author: Gao_XY            #作者名字
# Email: Gao_XY@163.com       #作者邮箱
# Organization:https://blog.youkuaiyun.com/ens33?type=blog        #作者网站
# Created Time : 2024-12-12 11:50:27               #创建文件时间
# Description: "给脚本传递两个参数,显示两者之和与两者之积"      #备注
##############################################################
read -p "请输入两个数字:" A B      #read -p  通过 read 读入持续等待输人
echo "他们的和为:" $[A+B]           #$[]执行内部的变量,并输出
echo "他们的积为:" $[A*B]

第三步 执行文件

sh num.sh

2、写一个脚本,判断nginx是否安装,没有则安装。

第一步 创建app.sh 文件

[root@localhost scripts]# vim app.sh 

第二步 编译脚本文件

#!/bin/bash
##############################################################
# File Name: app.sh
# Version: V1.0
# Author: Gao_XY
# Email: Gao_XY@163.com
# Organization:https://blog.youkuaiyun.com/ens33?type=blog
# Created Time : 2024-12-12 14:58:55
# Description:  "判断nginx是否安装,没有则安装"
##############################################################
[ -f nginx ] && echo "nginx is exists" || yum -y install nginx

# [ -f *** ] 判断该文件是否存在 若存在则输出 *** ,否则 下载该文件

# 或者 rpm -q nginx &>/dev/null && echo "nginx is exists"  || yum -y install nginx

第三步 执行脚本文件

[root@localhost scripts]# sh app.sh

 

3、写一个脚本,判断是否是root用户,如果不是输出"Please use the root user to execute the script"

第一步 创建user.sh脚本

[root@localhost scripts]# vim user.sh

第二步 编译文件

#!/bin/bash
##############################################################
# File Name: user.sh
# Version: V1.0
# Author: Gao_XY
# Email: Gao_XY@163.com
# Organization:https://blog.youkuaiyun.com/ens33?type=blog
# Created Time : 2024-12-12 14:47:37
# Description:
##############################################################
[ $UID -eq 0 ] && echo "this is root " || echo "Please use the root user to execute the script"
# $UID=0 则为root用户

#[ $UID -eq 0 ] 判断UID是否为0 若是则输出 **** ,否则输出 *****

第三步 执行文件

[root@localhost scripts]# sh user.sh

第四步 编译环境

[root@localhost scripts]# vim /etc/profile          #编辑该配置文件

  在末尾添加该配置

export PATH=$PATH:/scripts/user.sh    #使当前服务器下所有用户执行该目录下的变量

第五步测试

root用户测试

 

其他用户测试

[root@localhost scripts]# su gxy

 

本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 ... ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值