Linux Ubuntu Shell编程

2023-11-07

shell编程概念及作用

  • What:shell脚本编程是一种脚本编程语言,用于编写脚本文件来执行各种系统操作和自动化任务。
  • Why:可以消除繁琐的工作使其自动化,提高工作效率;shell脚本也是可移植的。可以在不同的linux系统上运行;学习成本低。
  • How:通过shell编程可以将一系列命令组合成脚本文件,并通过解释器(如Bush)执行。

Shell脚本开发步骤

  1. 使用vscode或者vim进行编辑,文件名以.sh结尾
  2. 添加权限:.sh文件默认是没有执行权限的,使用chmod+x 文件名.sh命令增加权限
  3. 执行shell脚本:./文件名.sh、

Shell类型

本篇以bash shell为例,如要添加一下代码

#!/bin/bash     //类似于c语言中的头文件

Shell中“”的使用

""   将“”中的值按照变量的值打印
''   将‘’内部内容原封不动的打印
``   将``中的内容按照命令执行
#实例

#!/bin/bash

#变量"i"
i=100

#保留字面值
echo "hello world"
#替换变量值
echo "hello $i"

#保留字面值
echo 'hello world'
#不替换变量的值
echo 'hello $i'

#执行date命令
echo Today is 'date'
#执行ls命令
echo'ls'

Shell中的变量

  • 自然变量

进程默认储存运行环境信息的变量
PATH:存放程序运行目录信息的环境变量
PWD:进程当前所在目录的绝对环境变量
HOME:存放登录用户家目录的环境变量

  • 位置变量

$1:传入第一个参数
$2:传入第二个参数
$3:传入第三个参数
…:…
$9:传入第九个参数
$0:程序名
$#:传入参数的个数
$$:Shell脚本运行的进程ID
$?:上一条Shell语句执行结果

  • 自定义变量(没有变量类型之分,全部都是字符串)

i=100
i=“helloworld”

输入和输出

echo:在命令行输出
read:在命令行输入(输入完一个值之后,按回车,不要按空格)

#输出
echo "输出"
#输入
read num1

scho "$num1"

Shell中的流程控制

if条件语句

if 条件
then
	语句1
	语句2
else
	语句3
	语句4
fi
test	测试文件类型及其值得大小
/*tset中:
-e     测试文件是否存在
-eq    相等   
-ge    大于等于
-gt    大于
-lt    小于
-le    小于等于
-ne    不相等*/
//实例
if [ test $num ge 0 ] && [ test $num -le 100 ] //代码等于c语言中的if(num>0&&num<100)
then                                    
	echo "num是0-100之间的数字"
else
	echo "num是0-100之外的数字" 
fi

case语句

case 变量 in
	值1)语句1
	;;2)语句2
	;;3)语句3
	;;
	*)语句4
	;;
esac
示例:
read $var in
	1)echo "壹"
		;;
	2)echo "贰"
		;;
	3)echo "叁"
		;;
	*)echo "不认识"
		;;
esac

Shell中的循环语句

for语句

for((i=0;i<5; i++))//ps:或者for i in 1 2 3 4 5//pss:for i in `seq5`
do
	语句
done
示例
for((i=0;i<5;i++))
do
	语句
done

while语句

while 条件
do
	语句一
	语句二
done
while [ $i -lt 101 ]
do
	sum=`expr $sum + $i`
	((i++))                       //((  ))俩括号为C的用法
done

until语句用法与while一直只是在其条件满足的时候退出

注:上述所有语法都可以采用(( ))俩括号括后采用C的写法

Shell中的数组

array=(how are you)    //定义数组array
echo ${array[0]}       //打印how
echo ${array[1]}       //打印are
echo ${array[2]}       //打印you
echo ${array[3]}       //打印how are you

Shell中的函数调用

add()
{
	sum=0
	sum=' expr $1+$2 '
	echo $sum
	return $sum
}
ret='add 10 20'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux Ubuntu Shell编程 的相关文章

  • Linux 从设备本身运行的脚本卸载设备

    我在路径中安装了一个 iso 映像 mnt iso 在这个 iso 中我有一个安装脚本 install sh 我从 iso 运行安装脚本 最后脚本询问用户是否要卸载 iso 本身 如果用户按 y 脚本将执行以下代码 cd umount mn
  • “设置:非法选项 -”在一台主机上,但在另一台主机上则不然

    我在我的一台 ubuntu 虚拟机中编写了一个 sh 脚本 该脚本工作正常 但是当我尝试在其他虚拟机中运行它时 它不起作用 两个虚拟机应该相同 和bash version两个虚拟机均回复 GNU bash version 4 3 11 1
  • 如何删除名称最大的目录?

    我有一个包含子目录的目录 其中一些名称是数字 不看的话 我不知道数字是多少 如何删除名称最大的子目录 我认为解决方案可能会将子目录按相反顺序排序 并选择以数字开头的第一个子目录 但我不知道该怎么做 感谢您的帮助 cd yourdir go
  • 如何将发布档案转换为 git repo

    我有一个发布档案列表 MyProject 0 9 zip MyProject 1 0 zip MyProject 1 3 tar gz MyProject 2 0 tar gz 每个文件都包含一个与存档同名的文件夹 不带文件扩展名 其中包含
  • 如何在 Linux 中创建可通过 Screen 应用程序连接的 pty

    我想创建 C C 应用程序 它在 dev xxx 中创建新的 虚拟 设备 并且能够与 屏幕 应用程序连接 例如 循环运行的程序会创建新的 dev ttyABC 然后我将使用 屏幕 dev ttyABC 当我向那里发送一些字符时 应用程序将其
  • RTNETLINK回答:没有这样的文件或目录错误

    1 ETH 1 2 LATENCY 2 3 LOSS 3 4 JITTER 4 5 BW 5 6 sudo sbin tc qdisc del dev eth0 root 7 sudo sbin tc qdisc add dev eth0
  • 使用 EOF 在未命名管道上发出信号

    我有一个测试程序 它使用使用 pipeline 创建的无名管道在 Linux 系统上使用 fork 创建的父进程和子进程之间进行通信 通常 当发送进程关闭管道的 write fd 时 接收进程从 read 返回值为 0 表示 EOF 然而
  • 如何通过jiffies实现经过时间

    我想了解如何在 C 中使用 jiffies 实现经过时间 假设我有一系列指令 include
  • 如何在shell脚本中读取单个字符

    我想要类似的选项getche 如何从命令行读取单个字符输入 Using read命令我们可以做到吗 在巴什中 read可以做到 read n1 ans
  • Ubuntu 上 sqlite3-ruby 安装错误

    我在 sqlite3 ruby 安装过程中遇到以下错误 Building native extensions This could take a while ERROR Error installing sqlite3 ruby ERROR
  • 为什么python请求默认不使用系统ssl证书?

    背景 我正在尝试Ubuntu 18 04 1 LTS 使用 next 安装自签名证书 cp rf my crt usr local share ca certificates update ca certificates 一切正常 因为现在
  • 在 Linux 内核中使用断言

    我有一个问题assert 在Linux中 我可以在内核中使用它吗 如果不是 例如 如果我不想输入 NULL 指针 您通常会使用什么技术 对应的内核宏是BUG ON and WARN ON 前者适用于当您想让内核恐慌并使系统崩溃 即不可恢复的
  • __NR_gettid 和 SYS_gettid 之间的区别

    我只是在寻找在 Linux 中获取唯一线程 ID 的方法 我发现的方法是将两个参数中的任何一个作为参数进行系统调用 NR gettid OR SYS gettid 有人能解释一下它们之间有何不同吗 Nothing in
  • Ubuntu:无法通过套接字“/var/run/mysqld/mysqld.sock”连接到本地 MySQL 服务器 (2)

    我有 Ubuntu 14 04 安装了 LAMP 并运行 Owncloud 的服务器 我尝试安装文书工作 https github com twostairs paperwork wiki Installing Paperwork on U
  • 无法从 Windows GUI 工具连接到远程 Linux 服务器上的 MySql 数据库

    我已经在 Amazon EC2 上的 Linux 服务器上设置了 mysql 数据库 这在本地效果很好 我可以登录 linux 盒子并管理 mysql 数据库 我正在尝试将本地 GUI 客户端连接到远程 mysql 但连接失败 我更新了 e
  • 如何在 Ubuntu x64 中使用 ptrace 插入 int3?

    我正在努力追随本指南 http eli thegreenplace net 2011 01 27 how debuggers work part 2 breakpoints 通过设置断点达到相同的结果 唯一的区别是我在 x64 系统上 所以
  • 如何将其他语言添加到 TeX

    在 MediaWiki 中 如果您在公式中添加非英文文本 则会被剪切 例如 如果你写 text f b and 俄语 西里尔字母 符号 输出将是fb not f b 首先 如果您的 MediaWiki 版本低于 1 18 则打开文件 inc
  • 内核驱动程序从用户空间读取正常,但写回始终为 0

    因此 我正在努力完成内核驱动程序编程 目前我正在尝试在应用程序和内核驱动程序之间构建简单的数据传输 我使用简单的字符设备作为这两者之间的链接 并且我已成功将数据传输到驱动程序 但我无法将有意义的数据返回到用户空间 内核驱动程序如下所示 in
  • 如果文件没有行尾字符,则 wc -l 不计算文件的最后一个

    我需要计算 unix 文件的所有行数 该文件有 3 行 但是wc l仅给出 2 个计数 我知道它不计算最后一行 因为它没有行尾字符 任何人都可以告诉我如何计算这一行吗 grep c返回匹配行的数量 只需使用一个空字符串 作为您的匹配表达式
  • 找出Linux上一个进程使用了​​多少内存页

    我需要找出进程分配了多少内存页 每个页面是 4096 进程内存使用情况我在查找正确值时遇到一些问题 当我查看 gome system monitor 时 内存映射下有几个值可供选择 Thanks 这样做的目的是将内存使用量除以页数并验证页大

随机推荐

  • 一文了解巨量引擎的买量产品矩阵:巨量云图、巨量方舟、巨量广告、巨量纵横

    01 巨量引擎是什么 巨量引擎是抖音集团 原字节跳动 于2022年5月6日更名生效 旗下综合的数字化营销服务平台 致力于让不分体量 地域的企业及个体 都能通过数字化技术激发创造 驱动生意 实现商业的可持续增长 简言之 巨量引擎是字节系流量
  • No rule to make target

    No rule to make target 引言 解决方法 引言 报错 No rule to make target Thirdparty g2o lib libg2o so needed by lib libygz SLAM so 停止
  • 计算机命令指示符大全,常用CMD命令提示符大全:让你玩转Win7系统“运行命令”!...

    CMD命令提示符对于电脑老鸟十分方便的工具之一 通过简单的CMD命令打开各类程序 Win7系统的运行命令提示符通过输入相应的命令来完成相应的操作来提高工作效率 下面装机之家小编整理的有Win7系统的常用CMD命令提示符大全 希望对大家有所帮
  • Centos7部署Vue项目

    一 安装docker 1 安装依赖包 sudo yum install y yum utils device mapper persistent data lvm2 2 设置阿里云镜像源 sudo yum config manager ad
  • redission的看门狗失效问题

    leaseTime这个参数字段表示租期 只要设置了租期 那么看门狗就失效了 不会续期 具有Watch Dog 自动延期机制 默认续30s lock tryLock 10 TimeUnit SECONDS 拿锁失败时会不停的重试 1 2 没有
  • Kubernetes Deployment控制器(二十)

    前面我们学习了 ReplicaSet 控制器 了解到该控制器是用来维护集群中运行的 Pod 数量的 但是往往在实际操作的时候 我们反而不会去直接使用 RS 而是会使用更上层的控制器 比如我们今天要学习的主角 Deployment Deplo
  • 小程序echarts 自定义tooltip提示框及显示隐藏兼容苹果iOS

    很久没有写小程序了 2023年回来补充一句 以下echart为2019年版本踩的坑 后来用了antv f2 性能比echart好很多 卡顿问题也不知道echart官方解决没有 移动端不推荐使用tooltip悬浮框 如果项目非要用 驯服不了产
  • 微软官方制作纯净版的U盘启动盘(详细步骤)

    文章目录 1 前期准备 超过8GB的U盘并且是空的 后面会格式化的 2 如何使用微软官方工具制作win10启动盘 第一步 百度搜索栏中搜索下载win10 找到官网 第二步 点击打开 立即下载工具 第三步 等待下载完成 这是下载完成后的样子
  • 风控趋势

    普惠金融的发展离不开信用体系的建设 截至目前 人行征信报告是部分普惠金融企业对借款申请人进行判断的重要手段 中国人民银行征信中心建设的一代征信系统于2006年正式运行 通过采集 整理 保存 加工企业和个人的基本信息 信贷信息和反映其信用状况
  • solidity 合约权限授权_智能合约编写之Solidity的编程攻略

    3月25日 BSN第二次开发者大赛正式启动 本次大赛以 编写基于多种底层框架的智能合约 为主题 开发者可基于FISCO BCOS等主流底层框架 结合业务场景设计 开发并部署智能合约 为了让大家更好上手智能合约开发 区块链服务网络发展联盟与F
  • Impala基础知识

    概述 Impala是由Cloudera公司开发的新型查询系统 参照Dremel系统进行设计的 提供SQL语义 能查询存储在Hadoop的HDFS和HBase上的PB级大数据 在性能上比Hive高出3 30倍 基于Hive的大数据实时分析查询
  • 文件包含支持的伪协议

    文件包含支持的伪协议 一 什么是伪协议 二 文件包含支持的伪协议用法 1 php 1 1 php input 1 2 php output 1 3 php filter 1 4 其它php 伪协议 2 file 3 data 4 phar
  • 华为OD机试真题-单词倒序【2023.Q1】

    题目描述 题目描述 输入单行英文句子 里面包含英文字母 空格以及 三种标点符号 请将句子内每个单词进行倒序 并输出倒序后的语句 输入描述 输入字符串S S的长度1 N 100 输出描述 输出逆序后的字符串 补充说明 标点符号左右的空格 gt
  • 在计算机中安装Manjaro

    前几天我为了尝鲜在电脑中安装了大蜥蜴 OpenSuse 新鲜期过了之后我准备换回原来的ArchLinux 结果发现大蜥蜴把原来的Grub设置覆盖了 如果要恢复的还得重新刻一个Arch引导U盘 与其这样我为什么不重新安装一个新的系统呢 Man
  • 第六节:JS中的加减乘除和比较赋值

    1 乘性操作符 乘法 除法 模运算 运算原则 先将运算内容转换为数字 然后进行计算 如果转换失败会返回NaN 小数 会出现0 1 0 2 不等于 0 2的误差 与0 1 0 2 不等于 0 3 原理相同 结果 数字或者NaN 能转换数字的结
  • 4.2 C++ 类模板 (补习)

    B战黑马程序员 C 语法 template lt typename T gt 类 include
  • SpringBoot下如何实现Redis + Caffeine二级分布式高性能缓存

    一 设计目的 支持Spring Boot 服务下 Redis Caffeine的高性能分布式缓存的实现 减少应用服务的集成接入成本 快速实现缓存 通过AOP方式拦截处理 不侵入原业务逻辑 支持多种功能特性 如异步 超时 全局 单条控制 压缩
  • 如何查询公司有哪些股东?

    如何查询公司有哪些股东 一 问题 1 谁是公司的法人代表 2 谁是公司的股东 董事 4 公司哪年成立的 5 公司的企业实力 注册资金多少 6 公司与公司之间是什么样的关系 看看股东信息 啥都明白了 二 解决办法 现在有答案了 尤其北京市场
  • 【phpmyadmin表权限报500异常处理,亲测有效】

    phpmyadmin表权限报500异常处理 亲测有效 问题复现 如何解决 问题复现 如图点击表的权限tab后 查看日志 如何解决 最后发现是缺失PHP缺少 mysqlnd拓展包导致的 先把原来的删掉 yum remove php mysql
  • Linux Ubuntu Shell编程

    shell编程概念及作用 What shell脚本编程是一种脚本编程语言 用于编写脚本文件来执行各种系统操作和自动化任务 Why 可以消除繁琐的工作使其自动化 提高工作效率 shell脚本也是可移植的 可以在不同的linux系统上运行 学习