【开发工具】Linux 服务器 Shell 脚本简单入门
记录一下学习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 脚本简单入门的更多相关文章
- (转)开发监控Linux 内存 Shell 脚本
原文:http://blog.csdn.net/timchen525/article/details/76474017 题场景: 开发Shell 脚本判断系统剩余内存的大小,如果低于100MB,就邮件 ...
- Linux Bash Shell j简单入门
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 ...
- Linux bash shell脚本语法入门
1.基础 #!/bin/bash //bash脚本第一句都是这个,他会让系统指定以bash来解释这个脚本 # //shell脚本注释符号 2.变量和使用 HOME= ...
- (转)Linux bash shell脚本语法入门
http://www.linuxsky.org/doc/newbie/201004/389.html 1.基础 #!/bin/bash //bash脚本第一句都是这个,他会让系统指定以bash来解释这 ...
- 调用远程linux服务器shell脚本
package com.haiyisoft.hyoaPc.ui; import java.io.BufferedReader;import java.io.IOException;import jav ...
- Linux生产服务器Shell脚本分享
Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来 ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- Linux 【Shell脚本经典案例】
Shell 简介 hell是linux的一外壳,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口 当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理 ...
- 08 bash特性--shell脚本编程入门
shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...
- 从windows到linux的shell脚本编码和格式问题
从windows到linux的shell脚本编码和格式问题 从windows到Linux的shell脚本编码和格式问题 1.异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh s ...
随机推荐
- 【转帖】ARM 虚拟化技术简介
一. 虚拟化技术二. 虚拟化技术的比较2.1 全虚拟化和二进制重写(Pure virtualization and binary rewriting)2.2 半虚拟化( Para-virtualiza ...
- [转帖]redis进程绑定指定的CPU核
文章系转载,便于分类和归纳,源文地址:https://blog.csdn.net/youlinhuanyan/article/details/99671878 1)查看某服务的pid $ ps -au ...
- [转帖]AMD Zen4 霄龙 9004 转战嵌入式:192 框框无敌!秒杀对手 80%
http://www.myzaker.com/article/64104f50b15ec02eb10eb659 其实,它就是把此前用于服务器.数据中心的霄龙 9004 系列的部分型号拿了过来,命名.规 ...
- [转帖]Linux文本处理三剑客sed详解(正则匹配、命令示例)
https://developer.aliyun.com/article/885609?spm=a2c6h.24874632.expert-profile.312.7c46cfe9h5DxWK 简介: ...
- ESXi上面虚拟机磁盘损坏修复案例
事故情况 最近同事反馈, 一个文件更新后出现了文件部分不可读的情况 具体现象为: 前端功能打开白屏 后端文件 前面93行不显示, notepad++打开都是 NULL 黑框. 然后重新覆盖文件, 有概 ...
- Mysql数据库部分管理命令极简学习总结
背景 今天遇到一个得很奇怪的问题. Mysql一个运行时间很长的select阻塞了对select里面左连接表做create index 操作的SQL 当时感觉不应该, 一直以为读锁不会与独占更新锁互斥 ...
- SignalR系列文章02---netCoreMvc创建Demo
1. 新建.net core MVC项目,并引入nuget包 2. 添加客户端库 3. 修改startUp.cs文件,增加services.AddSignalR();和endpoints.Map ...
- Postman 简单使用随笔记
1.要先使用Postman post请求,返回token,否则提示未登陆系统,下图为发送请求后的接口返回的信息 2.为方便,每次在访问接口时都要访问权限,所以将其作为局部的环境变量,设置如下: 3.要 ...
- DotLiquid(.net模版引擎)
可用生成C#代码,在KSFramework中有使用:https://github.com/mr-kelly/KSFramework 主页:http://dotliquidmarkup.org/ 文档: ...
- QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索.支持海量数据.跨语种问答 QAnything (Question and Answer based on Anythi ...