0 前言

此篇博客给出一个初级的shell程序,并且附带讲解。适合新入门的同志们品味。示例程序以及两个教程的pdf文本资源附在文末

编写Shell的时候,尽量在Linux系统里,用自带的编辑工具去写。如果用WIndows的编辑器写的话,放到LInux里可能会出现无法预知的因编码格式引发的错误。

例如Windows 的notepad++ ,里面编写的程序放到Linux里就不可以用了。

所以尽量在Linux里编写。

这里用的是Kali虚拟机的 MousePad,一个正常的 Linux 编辑器。

在VIm里编写东西简直就是折磨.....

同时,当下国内的shell教程(网上的),例如菜鸟网的,C语言网的,W3School网的,还有许多博客。都不是那么好,示例程序都很少,语法解释的莫名奇妙,一些常见的shell编写的错误和问题,既没有提出,也没有仔细的讲。导致学习的人抓狂。

有机会还是建议看教学视频。而不是这些文本教程。这就是面授课的好处。

0.1 shell初试

A.建立一个shell程序,并且打开编辑。

vim ./Myfirst.sh

B. Vim 里 分两种模式 命令模式Command 只能输入指令 编辑模式Insert 只能编辑.

Escapei 是切换的方式。

键入 i 进入编辑模式。 输入这两行代码。之后,依次键入 Esc : wq 执行写入并退出VIm。

tips:Esc yy 复制一行 Esc p 粘贴一行

#!/bin/bash
echo 'Hollo World!'

C. 为新建的脚本赋予权限

chmod a+x ./Myfirst.sh	# 为每一个用户(a)添加(+)执行权限(x)
./Myfirst.sh # 程序运行

1 程序功能

整个程序使用的是 if fi 的控制语句,来进行条件分支的走向。搭配标准的 shell命令。

1.1 对应程序的第一个功能,依次类推。

tip: read op让用户输入,把值赋予 op

1.1 显示当前主机名和IP地址。

hostname		# 显示主机名
hostname -I # 显示IP地址

1.1.1 if 语句 详解

切记, [ ] 每一个 [ 都要在附近留有空格,否则会报错。

if [  ];then
echo "if"
elif [ ];then
echo "elif"
else
echo "else"
fi

很多人看到上面的流程控制都蒙了,为什么这样写呢?如果把整个 if 语句,与shell命令行的方式结合在一起就好理解多了。

大家可以想一想,如果不像上述那么写,怎么在shell里编写几行的语句?是有点难的,我们必须界定何时键入换行键是执行,何时换行后还有命令的输入。

应用标准的 Shell if 格式则可以很好的在Shell里运行。

1.2 创建目录或者文件

首先键入工作路径,如果路径存在就接着运行,否则提示路径不存在,退出。若路径存在,提示键入目录或文件名字。创建目录或文件。

根据输入,匹配正则表达式,如果存在 ’.’ 即存在文件后缀就创建文件,否则创建目录。修改完成后显示结果退出程序。

1.3 修改文件属性

首先键入工作路径,如果路径存在就接着运行,否则提示路径不存在,退出。若路径存在,提示键入目录或文件名字。

若目录或文件存在,则进行下一步,否则提示不存在并退出脚本。目录或文件。利用 chmod 的数字修改方法。

修改完成之后,显示结果。退出程序。

1.3.1 chmod 修改文件属性详解

修改文件或目录属性虽然还有别的命令可以使用。但是还是推荐 chmod(修改) 搭配 ls -al(显示)。

Linux里权限的显示有9个字符

drwxrwxrwx

0个字符 d 表示这是一个目录 - 表示文件。

1-3个字符 rwx 表示 本用户的权限 r表示读权限 w 表示写权限 x 表示执行权限

4-6个字符 rwx 表示 本用户所属组的权限 r表示读权限 w 表示写权限 x 表示执行权限

7-9个字符 rwx 表示 其他组其他用户的权限 r表示读权限 w 表示写权限 x 表示执行权限

本用户相当于你自己,本用户所属组相当于你的家庭,其他组其他用户相当于其他家庭其他人。权限当然要分开算啦。

字符 rwx 可以用数字表示。也是常用的 chmod(修改)方法。

r 4

w 2

x 1

组合的rwx 则以相应符号的加法表示。

rwx 7

rw- 6

r-- 4

--x 1

rwxrwxrwx 777

chmod 721 ./Myfirst.sh 赋予 rwx--w--x权限。

That's all!

1. 4 退出脚本

2 程序

#!/bin/bash
echo `date`
printf "%-4s %-20s\n" 'Command' 'Function'
printf "%-4s %-20s\n" '1' 'Show HostName and IpAddress'
printf "%-4s %-20s\n" '2' 'Make Directory or File'
printf "%-4s %-20s\n" '3' 'ChangeMod for Directory or File'
printf "%-4s %-20s\n" '4' 'Exit'
echo "Please enter your choice!"
read op
# we need use [ $intA -eq ($intB | [1,2,3...]) ] to judge number. Notice the blank in [ ].
if [ $op -eq 1 ];then
printf "%-10s" 'HostName:' `hostname`
printf "%-10s" 'IpAddress:' `hostname -I`
elif [ $op -eq 2 ];then
echo "Before we creating a Directory or File, we need you to ensure your WorkSpace! Enter with an absolute path!"
read path
# Check whether a Dir exists.
if [ -d "$path" ];then
echo `cd $path`
echo "WorkSpace: " `pwd`
ls
echo "Enter your Dir or File, we will create it!"
read DirOrFile
# Use [[ ]] and `` to match regular expressions.
if [[ "$DirOrFile" =~ '.*\..*' ]];then
touch $DirOrFile
else
mkdir $DirOrFile
fi
echo "Have updated your WorkSpace"
ls
else
echo "$path is not exist!"
fi
elif [ $op -eq 3 ];then
echo "Before we changemod for a Directory or File, we need you to ensure your WorkSpace! Enter with an absolute path!"
read path
# Check whether a Dir exists.
if [ -d "$path" ];then
echo `cd $path`
echo "WorkSpace: " `pwd`
ls -l
echo "Enter your Dir or File!"
read DirOrFile
# Check whether a Dir or File exists.
if [ -e "$DirOrFile" ];then
echo "Enter your Mod number. E.g. 777(rwxrwxrwx) 721(rwx-w---x)"
read Mod
echo `chmod $Mod $DirOrFile`
echo "Have updated your WorkSpace"
ls -al
else
echo "$DirOrFile is not exist!"
fi
else
echo "$path is not exist!"
fi
else
echo "Over!"
exit 1
fi

3 资源

https://wws.lanzoui.com/iWLW6vfxgfa

Myfirst.sh

ReadMe.docx

Unix.Shell编程24学时(中英)

Shell简单入门程序参考的更多相关文章

  1. Shell 简单入门教程

    大数据开发岗为什么要学习Shell呢?1)需要看懂大数据运维岗人员编写的Shell程序.2)偶尔会编写一些简单Shell程序来管理集群.提高开发效率 艺多不压身 Shell是一个命令行解释器,它接受应 ...

  2. springmvc(一) springmvc框架原理分析和简单入门程序

    springmvc这个框架真的非常简单,感觉比struts2还更简单,好好沉淀下来学习~ --WH 一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解 ...

  3. MyBatis - 介绍、简单入门程序

    JDBC编程中的问题     1. 将SQL语句硬编码到Java代码,不利于系统维护.         设想如何解决:将SQL单独抽取出来,在配置文件(xml方式.properties文件)进行配置. ...

  4. SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  5. springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  6. Java爬虫——Gecco简单入门程序(根据下一页一直爬数据)

    为了完成作业,所以学习了一下爬虫Gecco,这个爬虫集合了以往所有的爬虫的特点,但是官方教程中关于Gecco的教程介绍的过于简单,本篇博客是根据原博客的地址修改的,原博客中只有程序的截图,而没有给出一 ...

  7. DirectShow简单入门程序

    1.首先确认已安装过相关工具及配置环境,然后打开vs2010,新建一对话框应用程序 取名为Player_test1,然后打开菜单->项目->属性-> 添加strmmiids.lib库 ...

  8. MyBatis学习(一)简单入门程序

    MyBatis入门学习 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

  9. freemarker的简单入门程序

    本文主要介绍了freemarker的常用标签<#list>   <#import>  <#assign>  <#if> <#else> &l ...

  10. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

随机推荐

  1. vue 识别\n \t 等字符(转载)

    使用.text(str)时,str中有"\n",但是页面显示却没有换行,需要在所在的 div添加属性 style="white-space: pre-line" ...

  2. js 实现俄罗斯方块(一)

    上学的时候就想尝试写个游戏了,不过那时一直想的都是些不太切合自身能力的高级游戏(需要花很多时间学习引擎,需要美工等等)最终都没有实现. 最近突然又想写了就利用业余时间写了个俄罗斯方块js写的画面也比较 ...

  3. 社区6月月报 | Apache DolphinScheduler重要修复和优化记录

    各位热爱Apache DolphinScheduler的小伙伴们,社区6月月报更新啦!这里将记录Apache DolphinScheduler社区每月的重要更新,欢迎关注. 月度Merge Stars ...

  4. Vim 全局配置 / 设置鼠标模式

    新搞的 Linux (Debian) 上的 vim 一右击粘贴就变成 insert (Visual) 模式,上网查了一下,要 set mouse=,但是每次设置太麻烦了,另外我也想改一下全局配色. 定 ...

  5. IoTSharp:基于 .NET 8.0 的开源物联网平台

    前言 想要快速了解物联网的世界吗?如果你对物联网(IoT)感兴趣,或者正打算开发自己的物联网项目.可以试试 IoTSharp,一个基于 .NET 的开源平台. 无论你是初学者还是有经验的大佬,IoTS ...

  6. 浅触go中的单元测试

    对于一个写好的功能模块,我们还需要对其进行单元测试,确保该模块不会出现其他bug,或者输出不是期望结果 对于一个go程序,主要设计以下命令: 执行测试 go test -v / go test 执行某 ...

  7. AutoFitTextureView Error inflating class

    报错: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解 ...

  8. 解决使用filter: blur时图片四周泛白的问题

    发现问题 在使用filter: blur(15px)模糊背景图时,发现图片周围会泛白. 解决问题 查了好多办法: 1.使用StackBlur.js处理图片模糊. 2.改变background-size ...

  9. 小tips:微信小程序登录后返回登录前的页面继续操作(保留参数)

    在app.js中添加如下两个方法即可: // 设置需要回调的地址 setCallbackUrl: function(mode) { return new Promise((resolve,reject ...

  10. GRLSTM: 基于图的残差LSTM轨迹相似性计算《GRLSTM: Trajectory Similarity Computation with Graph-Based Residual LSTM》(轨迹路网融合、知识图谱嵌入、图神经网络、残差网络、点融合图、多头图注意力网络GAT、残差LSTM、点感知损失函数(图的点损失函数、轨迹的点损失函数))

    2023年10月18日,14:14. 来不及了,这一篇还是看的翻译. 论文:GRLSTM: Trajectory Similarity Computation with Graph-Based Res ...