1.完成简单范例
    1.1对话式脚本:变量内容由使用者决定
    很多时候我们需要使用者输入一些内容,好让程序可以顺利运行。
   要求:使用read命令撰写一个script。让用户输入first name 与 last name后,在屏幕上显示“Your full name is:”的内容:
[root@CentOS7-1 scripts]# vim sh02.sh
#!/bin/bash
# Program:
#User inputs his first name and last name.
# History:
# 2022/11/6  Devil  First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH
read -p "Please input your first name: " firstname #提示使用者输入

read -p "Please input your last name: " lastname   #提示使用者输人

echo -e "\nYour full name is: $firstname $lastname"  #结果由屏幕输出

[root@CentOS7-1 scripts]# sh sh02.sh

1.2随日期变化:利用date 进行文件的创建
   假设服务器内有数据库,数据库每天的数据都不一样,当备份数据库时,希望将每天的数据都备份成不同的文件名,这样才能让旧的数据也保存下来而不被覆盖。怎么办?
  考虑到每天的“日期”并不相同,可以将文件名取成类似:backup.2022-11-6.data,不就可以每天一个不同文件名了吗?确实如此。那么2022-11-6是怎么来的呢?
  看下面的例子:假设想要创建3个空的文件(通过touch),文件名开头由用户输入决定假设用户输入“filename”,而今天的日期是2022-11-3,若想要以前天、昨天、今天的日期来创建这些文件,即 filename_20221101,filename_20221102,filename_20221103,该如何编写程序?
[root@CentOS7-1 scripts]# vim sh03.sh
#!/bin/bash

# Program:
#Program creates three files, which named by user's input and date command.
# History:
# 2018/11/3  Devil  First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#让使用者输入文件名称,并取得fileuser这个变量
echo -e "I will use 'touch' command to create 3 files.”#纯粹显示信息
read -P "Please input your filename:" fileuser    #提升用户输入文件名称
#为了避免用户随意按“Enter”键,利用变量功能分析文件名是否设置?
filename=${fileuser:-"filename"}
# 开始判断是否设置了文件名。如果在上面输入文件名时直接按下了 Enter键,那么fileuser值为空,这时系统会将“filename”赋给变量filename,否则将 fileuser 的值赋给变量 filename

#开始利用date命令来取得所需要的文件名
datel=$(date --date='2 days ago' +%Y%m%d)  #前两天的目期,注意+号前面有个空格
date2=$(date --date='l days ago' +%Y%m%d) #前一天的日期,注意+号前面有个空格
date3=$(date +%Y%m%d)                        #今天的日期
file1=${filename}${date1}                    #这三行设置文件名

file2=${filename}${date2}

file2=${filename}${date3}

#创建文件
touch "$filel"

touch "$file2"

touch "$file3"
[root@CentOS7-1 scripts]# sh sh03.sh
[root@CentOS7-1 scripts]# ll
   分两种情况运行 sh03.sh:一次直接按“Enter”键来查阅文件名是什么,另一次可以输入-些字符,这样可以判断脚本是否设计正确。
   1.3数值运算:简单的加减乘除
   可以使用declare 来定义变量的类型,利用“$((计算式))”来进行数值运算。不过可惜的是,bash shell系统默认仅支持到整数。下面的例子要求用户输入两个变量,然后将两个变量的内容相乘,最后输出相乘的结果。
[root@CentOS7-1 scripts]# vim sh04.sh
#!/bin/bash
# Program:
#User inputs 2 integer numbers; program will cross these two numbers.
# History:
# 2022/11/4  Devil  First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH
echo -e "You SHOULD input 2 numbers,I will cross them! \n"
read -p "first number: " firstnu
read -p "second number: " secnu
total=$(($firstnu*$secnu))
echo -e "\nThe result of $firstnu $secnu is ==> $total"
[root@CentOS7-1 scripts]# sh sh04.sh
   在数值的运算上,可以使用“declare-itotal=$firstnu*$secnu”,也可以使用上面的方式来表示。建议使用下面的方式进行运算:
var=S((运算内容))
   不但容易记忆,而且也比较方便。因为两个小括号内可以加上空白字符。至于数值运算上的处理,则有+、-、*、/、%等,其中%是取余数。
[root@CentOS7-1 scripts]# echo $((13 %3))
1
   2.了解脚本的运行方式的差异
   不同的脚本运行方式会造成不一样的结果,尤其对bash的环境影响很大。脚本的运行方式除了前面小节谈到的方式之外,还可以利用source 或小数点(.)来运行。那么这些运行方式有何不同呢?
   2.1利用直接运行的方式来运行脚本
   当使用前一小节提到的直接命令(不论是绝对路径/相对路径还是 $PATH内的路径),或者是利用bash(或 sh)来执行脚本时,该脚本都会使用一个新的bash环境来运行脚本内的命令。也就是说,使用这种执行方式时,其实脚本是在子程序的bash内运行的,并且当子程序完成后,在子程序内的各项变量或动作将会结束而不会传回到父程序中。这是什么意思呢?
   我们以刚刚提到过的 sh02.sh这个脚本来说明。这个脚本可以让使用者自行配置两个变量,分别是firstname与 lastname。想一想,如果直接运行该命令时,该命令配置的firstmame会不会生效?看一下下面的运行结果:
[root@CentOS7-1 scripts]# echo $firstname $lastname<==首先确认变量并不存在
[root@CentOS7-1 scripts]# sh sh02.sh
Please input your first name: Devil
Please input your last name:Fang    <==这个名字是读者自己输入的
Your full name is: Devil Fang   <==看吧!在脚本运行中,这两个变量会生效
[root@CentOS7-1 scripts]#echo $firstname $lastname 
                    <==事实上,这两个变量在父程序的bash中还是不存在

从上面的结果可以看出,sh02.sh配置好的变量竟然在bash环境下面无效。怎么回事呢?这里用图1来说明。当你使用直接运行的方法来处理时,系统会开辟一个新的 bash 来运行 sh02.sh里面的命令。因此 firstname、lastname等变量其实是在图1中的子程序bash内运行的。

图1 sh02.sh 在子程序中运行

sh02.sh运行完毕,子程序bash内的所有数据便被移除,因此上面的练习中,在父程序下面执行 echo $firstname时,就看不到任何东西了。
   2.2利用source运行脚本:在父程序中运行
   如果使用source来运行命令,那会出现什么情况呢?请看下面的运行结果:
[root@CentOS7-1 scripts]# source sh02.sh
Please input your first name:Devil  <==这个名字是读者自己输人的
Please input your last name: Fang
Your full name is: Devil Fang    <==在script运行中,这两个变量会生效
[root@CentOS7-1 scripts]# echo $firstname $lastname
Devil Fang                           <==有数据产生
   变量竟然生效了,为什么呢?因为source对script的运行方式可以使用下面的图2来说明。sh02.sh会在父程序中运行,因此各项操作都会在原来的bash内生效。这也是为什么当你不注销系统而要让某些写人~/.bashrc的设置生效时,需要使用“source ~/.bashrc”而不能使用“bash ~/.bashrc”的原因。

图2 sh02.sh在父程序中运行当

Linux 系统vim练习简单的 shell script相关推荐

  1. Linux系统 | vim配置

    Linux系统 | vim配置 配置文件路径如下 fly@fly-vm:~$ cat /etc/vim/vimrc 或者在个人家根目录下新建.vimrc lanfeiy@msil-virtual-ma ...

  2. Linux系统vim命令总结

    Linux系统vim命令总结 写在前面: 我们常常熟悉vim的保存退出命令,但也要记得掌握vim其他命令.面试总结,希望能帮助大家. 一.vim概念 vim是Linux系统的一种文本编辑工具,包括三种 ...

  3. LINUX系统vim指令提示command not found问题解决

    LINUX系统vim指令提示command not found问题解决 我们在安装完Centos后,它默认的是安装了VI编辑器,VIM是没有安装的,所以我们在使用vim test.txt时会提示: v ...

  4. Linux系统vim命令的一些体验

    title: Linux系统vim命令的一些体验 三个模式 Nomal mode(默认模式). Insert mode (插入模式 i I a A ). Visual mode(可视模式,取名叫光标模 ...

  5. linux系统vim下输入回车换行符号的解决方法

    linux系统vim下输入回车换行符号的解决方法 遇到问题 vim再linux 下回车后符号为'\r', 而不是我们想要的像windows下为'\r\n' 怎么解决呢?解决方法如下: 1. linux ...

  6. Linux系统VIM编辑器管理(2)

    VI/VIM模式概述 在 Linux 的世界中,绝大部分的配置文件都是以 ASCII 的纯文本形态存在,因此利用简单的文字编辑软件就能够修改设定了,与微软的 Windows 系统不同的是,如果你用惯了 ...

  7. linux系统常用的简单操作命令

    简介 1. linux系统是程序猿经常会接触的系统,特别是实施.运维工程师等职位,都需要对linux操作要求比较高,但也有很多新入门的工程师并不懂得如何操作一些常用的简单的linux命令,这是非常尴尬 ...

  8. Linux 系统licence,Linux系统中软件简单License的实现

    概述 目前,很多商用应用系统是运行在Linux系统之上的,为了维护开发者利益,有必要为软件添加license功能,防止软件被盗用和挪用.本文探讨如何在Linux软件中添加license功能,用到的算法 ...

  9. Linux系统简介(简单粗暴)

    Linux的诞生"哩呐科斯" Linux之父(Linus Torwalds),1991年10月,发布了0.02版(第一个公开版)内核,1994年03月,发布1.0版内核,UNIX诞 ...

最新文章

  1. 传统的6d位姿估计fangfa1_基于改进的点对特征的6D位姿估计
  2. java中单例实现常用的方式_Java单例的常见形式
  3. go gdb调试 参数设置 减小执行文件体积
  4. jquery实战-定宽(二)
  5. SQL语句中=null和is null
  6. 如何在SQL Server中检查日期是否为假期
  7. 第一部分 OpenStack及其构成简介
  8. Python核心编程笔记---- print@2
  9. Java线程间通信方式
  10. reg 正则表达式^
  11. 当Python遇上HDF5--性能优化实战
  12. getch函数详解看这一篇就够了-C语言(函数功能、使用方法、返回值、头文件)
  13. Android 百度地图开发详解
  14. Unity3D资源加密解决方案
  15. 鼎捷易飞ERP视频教程-金速鹏-专题视频课程
  16. 谷歌浏览器 Adobe Flash Player 插件被屏蔽 解决方案
  17. 计算机三级网络技术知识考点
  18. 使用POI中XSSF 实现“合并单元格时,仅保留左上角单元格的值,而放弃其他的值“ 问题排查笔记
  19. asf格式如何转换为mp4?
  20. 4和2大于号小于号箭头那边_小于号是哪个方向

热门文章

  1. 利用3D-DNA流程组装基因组
  2. 以色列量子计算软件公司,与欧洲机构合作开发薛定谔猫状态纠错技术
  3. 下载整个网站 有什么工具可以下载整个网站的内容吗?
  4. 挖一挖C#中那些我们不常用的东西之系列
  5. 64匹马,8个赛道,找出前4名最少比赛多少场?
  6. PHP+Mysql—留言管理系统网站(前端+后端、整套源码)
  7. Python 条件控制 — if语句
  8. 关于mysql中5位数字转化为日期格式的问题
  9. 易基因2022年度DNA甲基化研究高分项目文章精选
  10. AVFoundation开发秘籍笔记-03资源和元数据