一、常用环境变量
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 “$user”dosleep 300doneecho “$user has logged on!”fi

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

苏嵌第一天,shell中一些基础知识相关推荐

  1. shell脚本的基础知识

    shell脚本的基础知识 1 什么是shell 2 shell脚本的意义 3 如何创建shell脚本 4 如何执行shell脚本 5如何对脚本脚本进行调试 6 脚本练习 1 什么是shell shel ...

  2. shell编程入门、shell编程的基础知识(变量、命令、运算)、shell编程的语句

    shell编程 示例1 ex1 文件内容如下: #!/bin/sh #This is to show what a example looks like. echo "My First Sh ...

  3. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  4. 第一章c语言基础知识答案,第一章 C语言的基础知识练习题

    第一章 C语言的基础知识练习题 第一章 C语言的基础知识 第一节 对C语言的初步认识 习题 1. 下列叙述中错误的是 B A)任何一个C程序都必须有且仅有一个main函数,C语言总是从main函数开始 ...

  5. 第一节课的Python基础知识

    第一节课的Python基础知识 Python内置的数据类型 1.number 2.string 3.list 4.tuple 5.dict 6.set 其他小结 方法range()的使用 获取一个li ...

  6. Redis第一讲:相关的基础知识/数据类型/缓存的过期策略/双写一致性/内存存储和持久化

    Redis第一讲:相关的基础知识 摘要:本文是Redis(6.2.1)详解的第一讲,介绍Redis相关的基础知识,内存存储和持久化,Redis作缓存使用时的注意要点,常见的数据类型,缓存的过期策略,R ...

  7. Python基础教程(第3版)中文版 第一章 快速上手:基础知识(笔记)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,分享给大家: https://www.captainai.net/lf 如果你学完了Python不知道干什么,不妨去了解一下. 第一章 快速 ...

  8. C语言中重要基础知识的概述

    本章主要对于C语言中的基础知识进行一个大致的描述,适合有C语言基础但长久没接触C语言开发的人员进行快速回忆.在总体回忆基础知识之前,先来创建一个C程序.笔者的编译器是visual stduio2013 ...

  9. 第76节:Java中的基础知识

    第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...

最新文章

  1. UISearchBar和 UISearchDisplayController的使用
  2. ios开发之 icon规范+启动图规范+启动页规范
  3. CVPR 2021 | 自适应激活函数ACON:统一ReLU和Swish的新范式
  4. Node.js v7 Beta版引入citgm
  5. modelandview怎么在页面循环_新号段来啦!!!“靓号”怎么选?
  6. CentOS7-Docker 配置国内镜像源
  7. 统计功效(power)
  8. CPU测评程序、指标、工具
  9. Mac上redis下载安装与配置详细版
  10. Firefox中文版与英文版转换
  11. Matlap生成正弦波以及正弦波转为方波代码示例
  12. 基于51单片机的单词记忆测试器
  13. linux-网卡名字说明_基本网络配置_修改MTU值
  14. 80后的我们为什么不结婚
  15. 回首2022,展望2023
  16. linux项目管理软件排名,好用的项目管理软件大排名
  17. 英语智能语音测试软件,卓帆英语人机对话智能评测练习软件
  18. 数据表与简单Java类映射转换
  19. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
  20. 66页3万字医疗行业大数据治理解决方案

热门文章

  1. linux安全模式改文件,嵌入式Linux的安全模式设计 - 嵌入式操作系统 - 电子发烧友网...
  2. linux-如何限制普通用户的磁盘使用空间-磁盘配额quota,Linux系统下如何进行磁盘配额Quota的设置...
  3. leetcode240. 搜索二维矩阵 II
  4. leetcode82. 删除排序链表中的重复元素 II
  5. C++(STL):35---multimap容器
  6. (十三)nodejs循序渐进-高性能游戏服务器框架pomelo之扩展聊天服务器为机器人自动聊天
  7. Linux下开发常用的CVS使用手册
  8. 《C++ Primer 5th》笔记(11 / 19):关联容器
  9. 数学建模 线性规划模型基本原理
  10. 完成一个H.265/HEVC码流分析工具