不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊。

一个简单的shell程序

shell结构
1、#!指定执行脚本的shell
2、#注释行
3、命令和控制结构
创建shell程序的步骤
第一步:创建一个包含命令和控制结构的文件
第二步:修改这个文件的权限使它可以执行。
使用chmod u+x
第三步:执行shell
sh /test/example.sh
 
Shell变量
变量:是shell传递数据的一种方法,用来代表每个取值的符号名
shell有两类变量:临时变量和永久变量
临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括
 
用户自定义变量、位置变量。永久变量是环境变量,其值不随shell脚本的执行结束而消失。
 
 
用户自定义变量
用户定义的变量有字母或下划线开头,由字母,数字或下划线序列组成,并且大小写字母意义不
 
同,永久变量长度没有限制。
在使用变量值时,要在变量名前加上前缀“$”
 
 
设置和使用变量
设置变量:习惯上用大写字母来命名变量,变量名只能以字母表中的字符开头,不能用数字。
变量赋值:赋值号"="两边应没有空格
定时赋值,NUM=1
将一个命令的执行结果赋给变量,如:TIME=`date`
将一个变量赋给另一个变量,如:A=$B
使用echo 命令查看变量值。例如:echo $A
列出所有变量:
set
包含多个字的变量
$NAME=Mike Ron
运行时出错,应该为:
$NAME="Mike Ron"或$NAME='Mike Ron'
单引号和双引号的区别是,单引号里的变量不会被解析。
删除变量:
unset NAME
 
位置变量和特殊变量
shell解释执行用户命令时,将命令行的第一个部分作为命令名,其他部分作为参数。由出现在
 
命令行上的位置确定的
参数称为位置参数。
例如:
ls -l file1 file2 file3
$0这个程序的文件名ls -l
$n这个程序的第n个参数值,n=1--9
 
特殊变量
$*这个程序的所有参数
$#这个程序参数的个数
$$这个程序的PID
$!执行上一个后台命令的PID
$?执行上一个命令的返回值 0代表成功   非0代表不成功
 
 
shell命令
read命令:从键盘读入数据,赋给变量
如:red USERNAME
read的例子:
#!/bin/sh
read first second third
echo "您输入的第一个参数$first"
echo "您输入的第一个参数$second"
echo "您输入的第一个参数$third"
 
expr命令
shell变量的算术运算
expr命令:对整数型变量进行算术运算
例如:
expr 3 + 5   #加号左右必须有空格
expr $varl - 5
expr $v1 / $v2
expr $v1 \* 10
复杂的expr命令
复杂的运算 
expr ` expr 5 + 7 ` / $var1
将运算结果赋予变量:
var4=` expr $va1 / $var2 `
例:
#!/bin/sh
a=10
b=20
c=30
v1=`expr $a + $b + $c`
echo $v1
v2=`expr $c / $b`
echo $v2
v3=`$a \* $b`
v4=`expr $a + $c / $b`
echo $v4
 
变量测试语句
变量测试语句:用户测试变量是否相等、是否为空、文件类型等
格式:
test 测试条件
测试范围:整数、字符串、文件
字符串测试:
test str1=str2     测试字符串是否相等
test str1!=str2    测试字符串是否不相等
test str1    测试字符串是否不为空
test -n str1       测试字符串是否不为空
test -z str1       测试字符串是否为空
整数测试:
test init1 -eq int2  测试整数是否相等
test init1 -ge int2  测试int1是否>=int2
test init1 -gt int2  测试int1是否>int2
test init1 -le int2  测试int1是否<=int2
test init1 -lt int2  测试int1是否<int2
test init1 -ne int2  测试整数是否不相等
文件测试
test -d  file   指定文件是否目录
test -f  file   指定文件是否常规文件
test -x  file   指定文件是否可执行
test -r  file   指定文件是否可读
test -w  file   指定文件是否可写
test -a  file   指定文件是否存在
test -s  file   指定文件是否非0
变量测试语句一般不单独使用,一般作为if语句的测试条件,如:
if test -d $1 then
.....
fi
变量测试语句可用[]进行简化,如
test -d $1 等价于[-d $1]
 
 
 
 
 
 
#!/bin/sh
#比较两个字符串是否相等的程序
read -p "请输入第一个字符串:" str1
read -p "请输入第二个字符串:" str2 
 
if [ -n $str1 ] ; then
echo "您输入的第一个字符串不为空,值为:" $str1
else
echo "您输入的第一个字符串为空"
fi
 
if [ -n $str2 ] ; then
echo "您输入的第二个字符串不为空,值为:" $str2
else
echo "您输入的第二个字符串为空"
fi
 
if test $str1 = $str2 ; then
echo "两个字符串相等"
else
echo "两个字符串不相等"
fi
 
 
1、查看当前系统的环境变量和自己定义的变量
set命令
2、删除一个变量
unset 变量名
例如:unset NAME

Linux系统学习笔记之 1 一个简单的shell程序的更多相关文章

  1. linux系统编程综合练习-实现一个小型的shell程序(四)

    上节中已经对后台作业进行了简单处理,基本上要实现的功能已经完了,下面回过头来,对代码进行一个调整,把写得不好的地方梳理一下,给代码加入适当的注释,这种习惯其实是比较好了,由于在开发的时候时间都比较紧, ...

  2. UNP学习笔记2——从一个简单的ECHO程序分析TCP客户/服务器之间的通信

    1 概述 编写一个简单的ECHO(回复)程序来分析TCP客户和服务器之间的通信流程,要求如下: 客户从标准输入读入一行文本,并发送给服务器 服务器从网络输入读取这个文本,并回复给客户 客户从网络输入读 ...

  3. linux系统编程综合练习-实现一个小型的shell程序(一)

    之前已经花了不少篇幅学习了linux系统编程的很多知识点:文件与io.进程.信号.管道,而零散的知识点,怎么能够综合的串接起来是学习的一个很重要的目的,当然最好的方式就是用所学的知识点做一个项目了,所 ...

  4. linux系统编程综合练习-实现一个小型的shell程序(三)

    上节中已经实现了对普通命令的解析,包括输入重定向,输出重定向,管道,后台作业,这次就来执行已经解析好的命令,对应的函数为:execute_command(),首先对带有管道的命令进行执行: 比如:&q ...

  5. linux系统编程综合练习-实现一个小型的shell程序(二)

    上节minishell当中,已经初步实现了一个简单命令的解析,这节来继续对更加复杂命令进行解析,包含:输入重定向的解析.管道行的解析.输出重定向的解析以及是否有后台作业的解析,如下: 下面对其进行实现 ...

  6. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  7. Linux内核分析 笔记三 构造一个简单的Linux系统MenuOS ——by王玥

    一.知识点总结 (一)Linux源代码简介 arch/x86目录下的代码是我们重点关注的 内核启动相关代码都在init目录下 start_kernel函数相当于普通C程序的main函数 linux的核 ...

  8. Linux系统学习笔记(1)

    学习地址:http://www.runoob.com/linux/linux-tutorial.html 1.学习Windows和Linux哪个比较难? 前期是Windows容易学习,后期是Linux ...

  9. Django 学习笔记之六 建立一个简单的博客应用程序

    最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...

随机推荐

  1. sql2008中时间类型问题

    DATEDIFF (DD ,@sdate ,getdate() ) eg30 计算从开始日期到今天的天数 datename(weekday,@sdate) eg星期三 查询那一天是星期几 SQL Se ...

  2. ##DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告

    ##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...

  3. Python核心编程读笔 7: 条件和循环

    第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...

  4. Sublime Text3 插件安装教程

    链接地址:http://jingyan.baidu.com/article/4d58d541caeeaa9dd4e9c093.html

  5. boa,thttp服务器安装,配置,测试

    boa 1, SERVER_ROOT自定义,define.h头文件中,默认“/etc/boa" 2,./configure 3,修改CC,默认CC=gcc,make 4,error util ...

  6. 基于Web的系统测试方法

    基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战.基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否 ...

  7. Linux 安装xtrabackup的依赖问题

    问题: 尝试安装xtrabackup rpm -ivh percona-xtrabackup-2.2.11-1.el7.x86_64.rpm 报错 perl(DBD::mysql) 被 percona ...

  8. Qt中如何禁掉所有UI操作以及注意事项(处理各个widget的eventFilter这一层,但是感觉不好,为什么不使用QApplication呢)

    刚做完的一个项目,在测试时出现了一个问题:由于多线程的存在,当进行语音识别时:如果用户点击程序界面上的button或者其他接受点击事件后会发出信号的widget时,程序会crash ! 后来尝试着从多 ...

  9. Android学习笔记:利用httpclient和AsyncTask 发起网络http post操作

    1.在android4中,发起网络http操作,不能在Activity的事件(即主线程)中进行,必须在单独的线程中操作. 另外进行网络操作,需要在manifest文件中增加如下的权限: <use ...

  10. LA 5966 Blade and Sword (双向bfs + 想法) - from lanshui_Yang

    题目大意:给你一张有n * m个网格的图,每个网格可能是如下符号: “#”:墙 “P”:出发点 “D”:终点 “.”:空地 “*”:传送机 有一个旅行家(假设名叫Mike),他要从点P到达点D,途中必 ...