Shell以及Shell编程

news2024/11/26 2:31:16

Shell的任务

①分析命令;

②处理通配符、变量替换、命令替换、重定向、管道和作业控制;

③搜索命令并执行。

内部命令:内嵌在Shell中。

外部命令:存在于磁盘上的独立可执行文件。

#!/bin/bash

#! 称为一个幻数,内核用它来标识来解释执行脚本中的程序。该行必须在写在脚本的第一行,否则便失去其作用。

bash的功能

①名称补全   Tab键

②命令别名

alias  dir=‘ls – –color=tty’增加一个别名

unalias dir    删除一个别名

③命令历史机制 history

④输入输出重定向

⑤管道

“”    字符串界定符,允许进行变量和命令替换

‘’    字符串界定符,不允许进行变量和命令替换

&    后台执行,格式:命令&

()    成组命令,括号中的命令将在子shell中执行

{}    成组命令,括号中的命令将在当前shell中执行

\    转义符

shell变量

一是标准shell变量,用户登录时Shell为建立用户环境而注册的变量,也称环境变量;

另一类是用户自己定义的变量,即用户变量(临时变量)。

环境变量可以被当前Shell下启动的子进程(子Shell) 所继承,而局部(用户)变量不被继承;而且子进程的环境变量独立于父进程,子进程中对环境变量的修改不影响父进程变量的值。 

1)变量命名:以下划线 / 字母开头,后加任意;

2)变量赋值:通过等号,且等号两边无空格;

3)变量引用:$

4)命令替换:

m=date

$m   //输出date

m=$(date)

$m  //输出当前时间

5)变量输入 read m   //从键盘输入变量值即赋值成功;

//编写一个shell程序,程序执行时从键盘读入一个目录名,然后显示这个目录下的所有文件信息

#! /bin/sh
echo "Please input name of directory "
read Dir
cd $Dir
ls -l

//该shell程序名为shell1 运行时chmod +x shell1  之后./shell1

字符串的比较

string1 = string2    //字符串相等为真;

string1 != string2   //字符串不相等为真;

-n string  //字符串不为空为真

-z string //字符串为空为真

算数比较

expression1 -eq expression2    //表达式相等为真;

expression1 -ne expression1    //不等为真

expression1 -gt expression2     //大于为真

expression1 -ge expression2  //大于|等于为真

expression1 -lt expression2  //小于为真

expression1 -le expression2   //小于等于为真

! expression  //表达式为假为真

文件测试

-d file   //文件是一个目录 结果为真

-e file   //文件存在为真

-f file   //普通文件为真

-r file  //可读为真

-w file  //可写为真

-x file   //可执行为真 

-s file  //文件长度不为零 为真

//利用内置变量和位置参数编写一个shell2的简单删除程序,如删除的文件名为a,则在终端输入的命令为shell2 a

#! /bin/sh
if [$# -eq 0]   #参数长度是0
then
echo “Please specify a file!”
else
gzip $1   #对文件进行压缩
mv $1.gz $HOME/dustbin  #移动到回收站
echo "File $1 is deleted!"
fi
//输入一个字符串,如果是目录,则显示目录下的信息,如果是文件,则显示文件的内容

#! /bin/sh
read m    #将键盘输入的字符串存在变量m中
if [ -d $m ]   #输入的内容是目录的话
then
cd $m
ls -l
elif [ -f $m ]   #如果是文件的话    #注意 elif 的写法 并且要加then
then
cat $m
else
echo "input error!"   #输入不合理
fi
//使脚本仅仅接受一个命令行参数,并检查这个命令行参数是不是一个文件或者目录
//如果执行的时候没有给定参数或者参数的个数多于1个 或者这个参数不是一个普通文件 
//脚本则返回出错信息
 
#! /bin/sh
if [ $# -ne 1 ]  #如果参数个数为0 或者大于1
then
echo "参数个数不正确"
exit 1        //不正确会退出
fi
if [ -d "$1" ]  #是文件或者目录
then
echo "这是一个目录"
exit 0
elif [ -f "$1" ]
then
echo "这是一个文件"
else
echo "这个参数指定的类型不符合要求"
fi
//显示出当前目录中所有以字母 f 开头的脚本文件,并且假设所有脚本程序以.sh结尾
for filex in $(ls f*.sh)
do
cat $filex
done
exit 0
//根据指定的目录 输出目录的以及子目录的大小 并将目录中的文件都改为可执行
if [ $# -ne 1 ]
then
echo "参数个数不正确"
fi
exit 1 
if [ -f $1 ]
then
echo "参数指定为文件"
else
echo "参数类型不合适"
fi
exit 1

#一个位置参数  并且是目录
echo "$1目录的大小为"
#目录的大小
du -s $1    
#设置循环
for dir in $(ls $1)
do
  if [ -d $dir ]  #是子目录显示其内存 
  then
    echo "$dir是子目录,其大小为:"
    du -s $dir
  elif [ -f $dir ]            #是文件 设置可执行
  then 
    chmod +x $dir
  fi
done
//限制循环次数
#!/bin/bash
foo=1                        #注意赋值不许出现空格
while [ "$foo" -le 20 ]      #在test[]中的表达式要用引号  还有每个地方的空格注意
do
  echo "Hero i7"
  foo= $(($foo+1))          #自增的表示!!!  #表达式的表达情况!      
done
exit 0
//设计脚本统计目录中的普通文件、目录、连接文件的个数
#! /bin/sh
if [ $# -ne 1 ]
then
echo "参数个数不正确"
else
then
a=$(ls -l|grep ^-|wc -l)
b=$(ls -l|grep ^d|wc -l)
c=$(ls -l|grep ^l|wc -l)
echo "普通文件的个数是a,目录的个数是b,符号链接的个数是c"
fi


//或者中间部分替换为
a=`ls -l|grep ^-|wc -l`
//编写一个脚本名称为backup.sh,将第二个位置参数及其以后各参数所指定目录中的以.c和.sh结尾的,
//且文件大小不为0的文件复制到第一个位置参数所指定的目录中。 
//(注:要求检查位置参数的合法性)

编写一个脚本名称为backup.sh,将第二个位置参数及其以后各参数所指定目录中的以.c和.sh结尾的,且文件大小不为0的文件复制到第一个位置参数所指定的目录中(注:要求检查位置参数的合法性)

//注意循环范围  “ $@ ”    第二个循环范围并列写 $dir/*.c $dir/*.sh

//注意  -s 文件名 代表文件大小不为0为真

//注意左移位置变量 shift N 

编写脚本mytar.sh,将位置参数指定的所有文件(目录)进行归档并压缩,文件名格式:年月日(xxxx-xx-xx).tar.gz。要求检测位置参数个数,若为0,给出错误信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1803467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序毕业设计-综合文化信息管理系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

【开源】医院电子病历管理系统 SSM+JSP+MySQL

目录 一、项目介绍 科室模块 医生模块 预约挂号模块 就诊记录模块 就诊评价模块 二、项目界面 三、核心代码 一、项目介绍 经典老框架SSM打造入门项目《医院电子病历管理系统》,分为用户网页和管理后台,包括科室模块、医生模块、预约挂号模块、…

老黄一举揭秘三代GPU!打破摩尔定律,打造AI帝国,量产Blackwell解决ChatGPT全球耗电难题

近日,老黄手持Blackwell向全世界展示的那一刻,全场观众沸腾了。 这是迄今为止世界上最大的芯片! 用老黄的话来说,它是「全世界迄今为止制造出来的最复杂、性能最高的计算机。」GPT-4o深夜发布!Plus免费可用&#xff01…

10倍速开发开关电源:PSIM DLL集成指南与如何单步调试你的代码

文末有彩蛋哦。 去年提到要写一篇如何在利用PSIM Visual Studio进行仿真联调,加速实际嵌入式端C代码的开发,但因为懒一直没兑现。 本期简单总结下实现的方法。 特别声明:本文约一半以上内容有kimi/文心一言提问式生成,仅用于技…

【数据结构】二叉树:简约和复杂的交织之美

专栏引入: 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累…

菜品信息分页查询——后端SpringBoot

1.分页查询的逻辑: 页面发送ajax请求,将分页查询参数(page,pageSize, name)提交到服务端,获取分页数据; 页面发送请求,请求服务端进行图片下载,用于页面图片展示。 开发菜品信息分页查询功能&a…

大模型应用:基于Golang + 大模型构建简易的电商售前对话服务

1.背景 某X互联网电商公司为了解决当前大量用户的售前咨询问题,需要建设一个不需要客服介入的简易电商售前机器人,用于回答用户的售前问题,并给出基本可靠的咨询回答。 当前大模型如gpt、baichuan、文心等均有开放使用的OpenAPI接口&#xf…

2024 vite 静态 scp2 自动化部署

1、导入库 npm install scp2 // 自动化部署 npm install chalk // 控制台输出的语句 npm install ora2、核心代码 创建文件夹放在主目录下的 deploy/index.js 复制粘贴以下代码: import client from scp2; import chalk from chalk; import ora from ora;const s…

LMS 噪声测试解决方案

在城区,交通噪声是导致不适的一大源头,它影响着数百万人的日常生活,并会对健康与生活质量产生不利影响。为创造更为和谐宜居的生活环境、降低噪声所带来的风险,立法委员们正依据通过噪声(PBN)水平制定可以接受的噪声排放标准和承受…

WordPress网站更换域名后如何重新激活elementor

在创建WordPress网站时,我们常常需要更改域名。但是,在更换域名后,你可能会遇到一个问题:WordPress后台中的Elementor插件授权状态会显示为不匹配。这时,就需要重新激活Elementor插件的授权。下面我会详细说明如何操作…

应用广义线性模型一|线性模型

文章目录 一、统计学及思维模式二、未知现象的数学描述三、线性模型(一)线性模型的定义(二)线性模型的参数估计(三)线性模型的应用(四)离散解释变量的设计向量构建方法 四、线性模型…

iOS18:借助 Al,Siri 将获得广泛的知识,以便触发各个应用的功能

iOS18:借助 Al,Siri 将获得广泛的知识,以触发各个应用的功能 预计Siri将成为iOS18中一系列与人工智能相关增强功能的核心。 根据彭博社记者马克古尔曼的一份新报告,可以得知关于苹果智能助手的一些具体升级的新信息。 Siri新的人工智能: …

golang协程工作池处理多任务示例

1. 工作方法实现 // 工作线程 // id : 线程号 // jobs : 任务通道 (chan) // results: 完成结果通道 (chan) func worker(id int, jobs <-chan int, results chan<- int) {//遍历任务for j : range jobs {fmt.Println("工作协程: ", id, "启动任务: &quo…

c++【入门】正多边形每个内角的度数

限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 根据多边形内角和定理&#xff0c;正多边形内角和等于&#xff1a;&#xff08;n &#xff0d; 2&#xff09;180(n大于等于3且n为整数&#xff09;&#xff08;如下图所示是三角形、四边形、五边形、六边形的形状&#xff09…

云服务器CPU和内存直接被zzh恶意挖矿程序打满,如何解决?

回顾 最近在服务器上面部署网站&#xff0c;刚开始使用还是没问题的&#xff0c;当时一段时间之后发现CPU和内存总是被打满&#xff0c;本地没有跑大的应用&#xff0c;主要有mysql、nginx、redis&#xff0c;一度还以为是nginx 的问题&#xff0c;但是后来排除了。之后使用ht…

最新区块链论文速读--CCF A会议 CCS 2023 共25篇 附pdf下载(3/4)

Conference&#xff1a;ACM Conference on Computer and Communications Security (CCS) CCF level&#xff1a;CCF A Categories&#xff1a;network and information security Year&#xff1a;2023 Num&#xff1a;25 第1~7篇区块链文章请点击此处查看 第8~13篇区块链文…

Elasticsearch 认证模拟题 - 16

一、题目 创建一个搜索模版&#xff0c;要求 match_prase 查询&#xff0c;并且用指定的格式高亮&#xff0c;并排序 # 创建索引 PUT my_index {"settings": {"number_of_replicas": 0,"number_of_shards": 1},"mappings": {"p…

【Java面试】十二、Kafka相关

文章目录 1、Kafka如何保证消息不丢失1.1 生产者发消息到Brocker丢失&#xff1a;设置异步发送1.2 消息在Broker存储时丢失&#xff1a;发送确认机制1.3 消费者从Brocker接收消息丢失1.4 同步 异步组合提交偏移量 2、Kafka如何保证消费的顺序性3、Kafka高可用机制3.1 集群模式…

FPGA SPI采集ADC7606数据

一,SPI总线的构成及信号类型 SPI总线只需四条线(如图1所示)就可以完成MCU与各种外围器件的通讯: 1)MOSI – Master数据输出,Slave数据输入 2)MISO – Master数据输入,Slave数据输出 3)SCK – 时钟信号,由Master产生 4)/CS – Slave使能信号,由Master控制。 在一个SPI时…

关于音乐播放器与系统功能联动功能梳理

主要实现功能&#xff1a; 一、通知栏播放显示和控制 二、系统下拉栏中播放模块显示同步 三、与其他播放器状态同步&#xff1a;本应用播放时暂停其他应用播放&#xff0c;进入其他应用播放时&#xff0c;暂停本应用的后台播放 通知栏播放的显示和控制&#xff1a; 通过Not…