苏嵌第一天,shell中一些基础知识

一、常用环境变量
1、HOME变量
Linux系统中的每个用户都有一个相关的称作HOME的目录。

2、PATH变量
包含一列用冒号定界的目录的路径名字,便于可执行程序的搜索。

3、PS1变量
PS1变量包含了shell提示符,$符号

4、LOGNAME变量
包含用户的注册名字
echo “${LOGNAME}”

5、SHLVL变量
该变量包含你当前工作的shell level

6、SHELL变量
环境变量存储了用户的缺省shell,即shell类型

7、env命令
可用来查看所有已移除的环境变量表和它们各自的值

二、常用内部变量
$# ——传送给shell程序的位置参数的数量
$? ——最后命令的完成码或者在shell程序内部执行的shell程序(返回值)
$0 ——shell程序的名称
$* ——调用shell程序时所传送的全部参数的单字符串, “参数1”“参数2”…形式保存的参数
$n ——第n个参数

三、条件判断命令
test n1 -参数 n2(或 –参数 表达式)
真返回0,假返回1。

参数:
-lt 小于
-le小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于

·test语句的等价形式[ 1 –lt 4 ]
可用中括号代替test,把表达式括起来实现判断
注意表达式与中括号间有空格。

test 1 –lt 4 //判断1<4
echo $? //结果为0

eg:若输入的参数x 是正数,显示 x number is positive

#!/bin/bash
if test $1 -gt 0
then
echo "$1 number is positive"
fi

四、文件测试的常用代码
-f 存在且是普通文件
-d 存在且是目录
-s 存在且字节数大于0
-r 存在且可读
-w 存在且可写
-x 存在且可执行
如:test -d “mydoc”
判断mydoc是否是目录
五、课后作业

  1. 编写一个名为iffile程序,它执行时判断/bin目录下date文件是否存在?
#! /bin/bashfname=/bin/dateif (test –f “$fname”) thenecho “exist”fi

说明:
在shell程序中经常需要判断所处理的文件是否存在。本程序采用if语句的简单格式测试date文件,如果存在,则显示相关信息,否则退出if语句。

2.编写一个名为greet的问候程序,执行时能根据系统当前的时间向用户输出问候信息。设从半夜到中午为早晨,中午到下午六点为下午,下午六点到半夜为晚上。

#! /bin/sh -hour=`date|cut –c 10-11`if test “$hour” –ge 0 –a “$hour” –lt 12; thenecho “Good morning!”elif test “$hour” –ge 12 –a “$hour” –le 18; thenecho “Good afternoon!”elseecho “Good evening!”fi

说明:
第一个有效语句是将命令执行的结果赋给hour变量,所以用反向单引号。
用cut命令从date命令的输出中切割出“小时”信息;这里-c 10-11选项表示只切割10到11列。
这个程序使用了if连用格式,也可以使用if完整格式的嵌套形式。

3.编写一个名为ifuser的程序,它执行时带用户名作为命令行参数,判断该用户是否已经在系统中登录,并给出相关信息。

#! /bin/sh -
if test $# -ne 1 then
echo "Incorrect number of arguments"echo "Usage: ifuser username"
elseuser=$1if who | grep –q $user ; thenecho $1 "user is logged on."exit 0elseecho $1 "user is not logged on."exit 1fi
fi

说明:
(1)由于who | grep $user不是表达式而是命令组合,所以不需要test语句测试;如果命令组合执行成功,即找到指定的用户名则返回码为0;否则为非0。
(2)在这个程序中使用了grep字符串搜索命令和“|”管道命令
(3)用grep 命令–q选项来禁止显示搜索到的信息。
(4)还使用了exit命令,以终止shell程序的执行。exit 0表示程序终止后返回0值,而exit 1表示程序终止后返回非0的值。

4.编写一个名为menu的程序,实现简单的弹出式菜单功能,用户能根据显示的菜单项从键盘选择执行对应的命令。

#! /bin/sh -
clear
echo "  -----------------MENU------------------"
echo
echo "  1.Find files modified in last 24 hours"
echo "  2.The free disk space"
echo "  3.Space consumed by this user"
echo "  4.Exit"
echo   
echo -n "  Select:"
read choice
case $choice in
1)find $HOME -mtime -1 -print;;
2)df;;
3)du -s $HOME;;
4)exit;;
*)echo "Invalid option"esac

说明:
(1)本程序菜单的第一项是显示/home目录下,最近24小时内所有修改过的文件。命令中的-1参数是数字“1”,表示一天(24小时)。第二项是检查磁盘空间。第三项是显示/home目录下文件的大小,命令中的-s选项是为了仅显示总计。第四项是退出程序。
(2)为了使程序美观,用echo –n实现输入的选择数字不换行。
(3)输入的数字不在1-4范围内时,显示无效的选项信息。

5.编写一个名为chname的程序,将当前目录下所有的.txt文件更名为.doc文件。

#! /bin/sh -
for file in *.txt
doleftname=`basename $file .txt`mv $file $leftname.doc
done

说明:
(1)在Linux系统中不支持mv .txt .doc这样的更名命令形式,如果需要将文件成批地更名最好编写一个shell脚本文件。
(2)在for语句的参数列表中使用了“*”通配符。
(3(在程序中用到basename命令,该命令从随后的文件名剥去指定的后缀。

6.编写一个名为chuser的程序,执行中每隔5分钟检查指定的用户是否登录系统,用户名从命令行输入;如果指定的用户已经登录,则显示相关信息。

 #! /bin/sh –if test $# -ne 1thenecho “Usage: chuser username”elseuser=”$1”until who |grep “$userdosleep 300doneecho$user has logged on!”fi

说明:
(1)如果没有从命令行输入用户名,则测试$# -ne 1为“真”,显示用法提示信息。
(2)程序中until语句的expression(循环条件)是who|grep “$user”命令执行的返回码,如果没有找到指定的用户名,返回码为非0(为“假”),则用sleep命令暂停执行程序5分钟;找到后返回码为0(为“真”),则终止循环并显示该用户已经登录的信息。
(3)采用重定向到/dev/null空文件的目的是不显示查找到的用户其他信息。

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

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

相关文章

Java异常处理001:Maven clean package时Failed to clean project: Failed to delete

Java异常处理001&#xff1a;Maven打包时Failed to clean project: Failed to delete 异常日志&#xff1a; [ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.6.1:clean (default-clean) on project fmk-web: Failed to clean project: Failed …

Weekly Contest 141

做了第一道后&#xff0c;看了下中间两道题目&#xff0c;没怎么看懂就先放着&#xff0c;做完最后一道&#xff0c;然后就没时间了。 1089. Duplicate Zeros Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remaining element…

IntelliJ IDEA 中配置、使用 SVN

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.配置svn 如下图&#xff1a; file -- setting -- version control -- subversion -- 选择 SVN安装路径 -- apply -- OK 2.直接检出…

切记!职场邮件需注意的细节

电子邮件是如今工作场所重要的通信工具之一&#xff0c;但不是每个人都知道如何很好地使用这个工具。工作邮件也是人际沟通的一种方式&#xff0c;和打电话、面谈一样&#xff0c;有很多学问讲究&#xff0c;所以在发送邮件之前一定要深思熟虑。 【发送&#xff0c;抄送&…

李洋疯狂C语言之初

1.sizeof 是看数据类型所占空间大小&#xff0c;这个大小是以 字节&#xff08;B&#xff09;为单位 char 是C语言的字符数据类型 %d 用在printf 中表示往屏幕打印一个数字 printf ("char&#xff1a; %d\n", sizeof(char)); 数据类型之间的关系&#xff0c;shor…

时时流量查看工具-ifsta,nload,iftop

为什么80%的码农都做不了架构师&#xff1f;>>> 1、ifstat 是一个网络流量监测程序。能查看网卡的流出和流入的字节. 概要&#xff1a;ifstat就像iostat/vmstat描述其它的系统状况一样&#xff0c;是一个统计网络接口活动状态的工具。 参数&#xff1a; -l 监测环路…

10大清宿便排毒方法及简单排毒瘦小腹运动

早上空腹喝水法&#xff1a;每日起床后空腹喝下500C.C.加盐的冷开水。只要是冷的饮料或水分&#xff0c;在肠胃空腹时都有刺激肠胃蠕动的效果&#xff0c;而且越冰刺激效果越好&#xff0c;建议不需加盐&#xff0c;以免高血压患者因盐分中的金属离子造成肾的负担。 优酪乳加绿…

破解 IntelliJ IDEA 、免费注册方法、注册码

1. 找到hosts文件&#xff0c;在此路径下 C:\Windows\System32\drivers\etc 2. 修改hosts 文件&#xff0c;在最后 加一行配置&#xff1a; &#xff08;此操作需要电脑管理员权限&#xff09; 0.0.0.0 account.jetbrains.com 3. 从idea 注册码生成网站生成一组注册码。网…

李洋疯狂C语言之冒泡排序法

今天的课后任务是2种排序方式&#xff08;冒泡排序和选择排序&#xff09; 冒泡排序法1 原理&#xff1a;从a[0]开始&#xff0c;依次将其和后面的元素比较&#xff0c;若a[0]>a[i]&#xff0c;则交换他们&#xff0c;一直比较到a[n]。同理对a[1], a[2], ……a[n-1]处理&a…

MySQL水平分区代理Spock Proxy(一)

为什么80%的码农都做不了架构师&#xff1f;>>> MySQL水平分区代理Spock Proxy 水平分区(sharding)将同一数据表中的数据通过特定的算法进行分离&#xff0c;分别保存在不同的数据表中&#xff0c;从而部署到不同的数据库服务器上。 水平分区后&#xff0c;数据拆分…

OO第四单元作业

1.作业的架构设计 &#xff08;1&#xff09;对于第一次作业中&#xff0c;要求我们实现关于类图的查询指令。 在这次作业中&#xff0c;主要采用的储存方法是哈希表。 在查询方法上&#xff0c;大多数要求诸如共有多少类等&#xff0c;利用哈希表进行查询即可。 比较困难的一些…

伤钱伤感情 10件不能和亲戚一起干的事儿

关于亲戚和理财&#xff0c;网友小盒总结了下十大别和亲戚干的事儿&#xff0c;干了之后保管既伤钱又伤感情&#xff1a; 1、别帮亲戚炒股 赚了觉得你赚得不如以前吹的那么多&#xff0c;赔了就剩翻脸了&#xff0c;搭时间搭功夫还不落好。 2、别和亲戚一起做生意 道理同…

李洋疯狂C语言之选择排序

选择排序法 原理&#xff1a; 选择法循环过程与冒泡法一致&#xff0c;它还定义了记号mini&#xff0c;然后依次把a[min]同后面的元素比较&#xff0c;若a[min]>a[j],则使kj. 最后看看ki是否还成立&#xff0c;不成立则交换a[k], a[i],这样就比冒泡法省下许多无用的交换&a…

利用 git 提交代码、git 简单使用(拉取、推送、分支、合并)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.安装 git sudo apt-get install git 2.查看版本&#xff1a; git --version 我的版本信息&#xff1a; 3. 配置用户名和邮箱 : …

如何在android studio中设置sdk path?

为什么80%的码农都做不了架构师&#xff1f;>>> Press F4 into Project StructureLeft > SDKsPress , add another sdk转载于:https://my.oschina.net/itfanr/blog/195714

面试题之第一部分(Python基础篇) 80题

第一部分&#xff08;python基础篇&#xff09;80题 为什么学习Python&#xff1f;* # 1. python应用于很多领域&#xff0c;比如后端&#xff0c;前端&#xff0c;爬虫&#xff0c;机器学习&#xff08;人工智能&#xff09;等方面&#xff0c;几乎能涵盖各个开发语言的领域&a…

OpenCL的安装与配置

Windows 步骤 1&#xff1a;在 http://developer.amd.com/pages/default.aspx根据相应的操作系统&#xff0c;下载最新的 AMD driver&#xff0c; AMD APP SDK。AMD APP SDK目前支持Windows VISTA[32][64]bit&#xff0c;Windows 7[32][64]bit操作系统。 步骤 2:如果已经安装了…

解决:java.lang.IllegalStateException: ApplicationEventMulticaster not initialized

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. springboot 项目启动时报错&#xff1a; java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call …

李洋疯狂C语言之求素数的方法

今天课上李洋老师讲到求素数时&#xff0c;讲了一种新的方法&#xff0c;一开始听得我一脸懵逼&#xff0c;但当我理解的时候&#xff0c;眼前一亮&#xff0c;老师的算法省去了不少步骤&#xff0c;话不多说&#xff0c;附上题目&#xff1a;求100到200之间的素数。 输入&…

面试官问我:平常如何对你的 Java 程序进行调优?

阅读本文大概需要 10 分钟。作者&#xff1a;张俊城, 郭理勇, 刘建来源&#xff1a;http://t.cn/AiCTERJzJava 应用性能优化是一个老生常谈的话题&#xff0c;典型的性能问题如页面响应慢、接口超时&#xff0c;服务器负载高、并发数低&#xff0c;数据库频繁死锁等。尤其是在“…