记录一下学习Shell编程的关键知识点,使用最通俗简洁的语句,让阅读者能快速上手Shell脚本的编写

1.什么是Shell?

Shell是一种常用于服务器运维的脚本语言。众所周知,脚本语言不需要编译器,只需要解释器。

在各种Shell解释器中,sh,bash最常用,而bash是兼容sh的,目前市面上的Linux基本用的都是bash

查看系统当前shell解释器

echo $SHELL

查看系统有的shell解释器

cat /etc/shells

2.编写第一个shell脚本

新建一个.sh文件,比如 class1.sh,编写第一句脚本,保存。

# echo的意思是输出语句。 PS.在不使用EOF方法的情况下,shell只有单行注释,前+#
echo "Hello World!"

把此.sh脚本设为可执行,再执行此脚本

chmod +x ./class1.sh
./class1.sh

3.使用变量

编写一些变量的基础用法

name="sima"               #定义一个变量
echo $name #输出此变量,变量前+$
echo "My name is ${name}"
unset name #删除变量,删除后输出变量,没有任何输出
read name #从控制台输入一个变量,赋值给name
echo ${name} #输出此变量 +不+{}都一样

执行此脚本得到

只读变量的使用,执行后报错。

name="sima"
readonly name
name="sima2"

关于转义字符的替换这里不做过多描述,尽量精简,使用到的时候再百度就好。

4.命令行参数

这个东西可以当做C#、java中的方法理解,一个.sh脚本类似一个方法,给这个方法传递参数,方法再使用这几个数进行计算。

运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。、

举个例子,新建一个脚本 class2.sh ,记得写完要赋予执行权限,运行。

echo "filename: $0"
echo "name: $1"
echo "age : $2"
echo "all : $@"
echo "all : $*"
echo "Total Number of Parameters : $#"

运行sh文件

./class2.sh sima 25

替换变量

5.Shell运算符

expr 是一款表达式计算工具,使用它能完成表达式的求值操作(若要计算浮点,请使用bc)。新建class3.sh脚本

a=10
b=20
val=`expr $a + $b`
echo "a + b : $val" if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a != $b ]
then
echo "a is not equal to b"
fi

两点注意:

  • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
  • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

脚本执行后输出的

PS.在Windows下编写好sh文件后,在Linux下运行会报错,这是因为Windows系统的文件换行使用的是\r\n,而Unix系统是\n。解决方法:

# 使用vim打开文件
vim class3.sh
# 转换格式
:set ff=unix
# 保存文件
:wq

关系运算符及布尔运算符,使用例子

a=10
b=20 if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a -lt 100 -o $b -gt 100 : returns true"
else
echo "$a -lt 100 -o $b -gt 100 : returns false"
fi

文件运算符

6.Shell中的字符串

单引号:任何字符都会原样输出,单引号字串中不能出现单引号。

双引号:可以有变量,可以出现转义字符。

拼接字符串,新建class4.sh脚本,输入,执行。

your_name="sima"
echo "hello, "$your_name" !"
echo "hello, ${your_name} !"
echo "hello, $your_name !" #字符串替换
echo ${#your_name} #字符串长度
echo ${your_name:1:2} #截取第2-3位字符串

7. Shell中的数组

新建class5.sh脚本,输入,执行。

array=(sima 25 man)   #也可以 array[0]=sima  array[1]=25
echo ${array[0]} #某个下标的元素
echo ${array[@]} #数组全部元素
echo ${array[*]} #同上
echo ${#array[@]} #数组长度
echo ${#array[*]}   #同上
echo ${!array[@]} #所有下标
echo ${!array[*]} #同上
echo ${#array[1]} #某个下标的长度

printf

格式:printf format-string [arguments...] 其中(format-string: 格式控制字符串、arguments: 参数列表)
案例:printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
%s %c %d %f 都是格式替代符
d:Decimal 十进制整数 对应位置参数必须是十进制整数,否则报错!
s:String 字符串 对应位置参数必须是字符串或者字符型 否则报错
c:Char 字符 对应位置参数必须是字符串或者字符型 否则报错
f:Float 浮点 对应位置参数必须是数字型 否则报错
%-10s : 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f :指格式化为小数,宽度为4个字符,其中.2指保留2位小数。
其他转义字符在此省略.

【开发工具】Linux 服务器 Shell 脚本简单入门的更多相关文章

  1. (转)开发监控Linux 内存 Shell 脚本

    原文:http://blog.csdn.net/timchen525/article/details/76474017 题场景: 开发Shell 脚本判断系统剩余内存的大小,如果低于100MB,就邮件 ...

  2. Linux Bash Shell j简单入门

    BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  3. Linux bash shell脚本语法入门

    1.基础 #!/bin/bash   //bash脚本第一句都是这个,他会让系统指定以bash来解释这个脚本 #                 //shell脚本注释符号 2.变量和使用 HOME= ...

  4. (转)Linux bash shell脚本语法入门

    http://www.linuxsky.org/doc/newbie/201004/389.html 1.基础 #!/bin/bash //bash脚本第一句都是这个,他会让系统指定以bash来解释这 ...

  5. 调用远程linux服务器shell脚本

    package com.haiyisoft.hyoaPc.ui; import java.io.BufferedReader;import java.io.IOException;import jav ...

  6. Linux生产服务器Shell脚本分享

    Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来 ...

  7. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  8. Linux 【Shell脚本经典案例】

    Shell 简介 hell是linux的一外壳,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口 当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理 ...

  9. 08 bash特性--shell脚本编程入门

    shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...

  10. 从windows到linux的shell脚本编码和格式问题

    从windows到linux的shell脚本编码和格式问题   从windows到Linux的shell脚本编码和格式问题 1.异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh s ...

随机推荐

  1. [转帖]AHCI到NVMe,SSD的关键科技革命

      https://baijiahao.baidu.com/s?id=1718020841628703656&wfr=spider&for=pc HDD和早期SSD大部分使用SATA接 ...

  2. [转帖]程序运行崩溃(segfault)的排查方法

    这篇博文记录的非常详细:https://blog.csdn.net/zhaohaijie600/article/details/45246569 我的笔记: 写的C++程序老是运行两三天就挂了,关键是 ...

  3. [转帖]整理常用的 vim 命令

    vim 是一款功能强大的文本编辑器,它是Linux下常用的编辑器之一,对于熟练掌握了 vim 的人来说,用它编辑文件,方便又快捷,能极大的提高工作效率 vim 功能强大,对应的命令也非常的多,对于初学 ...

  4. [转帖]linux下如何避免rsyslog系统日志不停打印到console

    背景:linux环境下,服务器由于某种异常导致rsyslog message不停打印到console控制台,影响我们正常使用. ps:我遇见的场景: 解决办法:1. vim /etc/rsyslog. ...

  5. 【原创】关于xenomai3 RTnet的一点记录

    xenomai3协议栈RTnet支持TCP.UDP,但不支持IGMP: 对ARP支持有限制:地址解析的延迟会影响数据包传输延迟,RTnet为实时性考虑,路由表设计静态的,只在设置期间配置,或者接收到其 ...

  6. 前端 Git-Hooks 工程化实践

    前言 前段时间,部门的前端项目迁移到 monorepo 架构,笔者在其中负责跟 git 工作流相关的事情,其中就包括 git hooks 相关的工程化的实践.用到了一些常用的相关工具如 husky.l ...

  7. Spring 应用合并之路(二):峰回路转,柳暗花明 | 京东云技术团队

    书接上文,前面在 Spring 应用合并之路(一):摸石头过河 介绍了几种不成功的经验,下面继续折腾- 四.仓库合并,独立容器 在经历了上面的尝试,在同事为啥不搞两个独立的容器提醒下,决定抛开 Spr ...

  8. 源码补丁神器—patch-package

    一.背景 vue项目中使用 vue-pdf第三方插件预览pdf,书写业务代码完美运行,pdf文件内容正常预览无问题.后期需求有变,业务需求增加电子签章功能.这个时候pdf文件的内容可以显示出来,但是公 ...

  9. React中css的module

    处理css全局作用 现在有这样一个场景: A页面和B页面都有一个相同的类名 我们在A页面中有引入css. B页面没有css 在我们切换A和B页面的时候. A页面的css也作用在了B页面. 我们只希望A ...

  10. 【K哥爬虫普法】大数据风控第一案:从魔蝎科技案件判决,看爬虫技术刑事边界

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...