linux+shell+func,Linux shell编程笔记总结

Linux Shell学习笔记简介

Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。分类

Linux中的shell有多种类型,其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。三种shell各有优缺点。Bourne shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourne shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。Linux操作系统缺省的shell是Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。C shell是一种比Bourne shell更适于编程的shell,它的语法与C语言很相似。 Linux为喜欢使用C shell的人提供了Tcsh。Tcsh是C shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法,它不仅和Bash shell是提示符兼容,而且还提供比Bash shell更多的提示符参数。Korn shell集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。语法

shell语言是非类型的解释型语言,不象用C++/JAVA语言编程时需要事先声明变量.给一个变量赋值,实际上就是定义了变量. 由于shell程序的变量是无类型的,所以用户可以使用同一个变量时而存放字符时而存放数字。 在linux支持的所有shell中,都可以用赋值符号(=)为变量赋值. 如: abc=9 (bash/pdksh不能在等号两侧留下空格 ) 如: name=abc (bash/pdksh) 在变量赋值之后,只需在变量前面加一个$去引用. 如: echo $abc

字符集变量的声明方法是用双引号如:abc=”how are you ” (将字符集 how are you 赋值给abc)echo $abc 输出结果:how are you 引用系统变量赋值如:abc=”$LOGNAME,how are you”; ($LOGNAME 存储了系统登录用户名)echo $abc输出结果:root,how are you字符串相加abc=” how are you”” root”echo $abc输出结果:how are you root

十进制:直接写数字 如:a=12 #a是十进制12八进制:在前面加0如:a=012 #a是八进制12十六禁止:在数字前加0x如:a=0x12 #a是十六进制12

数组下标是以零为开始;数组的使用方法如:arr1=(1 2 3 4 5) # 定义数组arr1,并初始化5个值echo ${arr1[0]} #打印数组中第零个变量值arr1[0]=6 #将数组中第0个值赋值为6echo ${arr1[0]} #打印数组中第零个变量值

系统变量就是环境变量,系统变量定义后可以直接在操作系统中调用,对于不同的用户,其所有的系统变量也不同;系统变量用export声明,如:export varname=”system var” #声明varname 为系统变量;可以在操作系统提示符下直接访问varname如:#echo $varname执行结果:system var

算术运算符+ 加法- 减法* 乘法/ 除法** 幂运算let "z=5**3"echo "z = $z" # z = 125% 取模+= 加等于(通过常量增加变量)如:let "var += 5" #var将在本身值的基础上增加5-= 减等于*= 乘等于如:let "var *= 4"/= 除等于%= 取模赋值,算术操作经常使用expr或者let表达式

逻辑运算符|| 逻辑或&& 逻辑与)

Str1 = str2 当str1与str2相同时,返回True Str1! = str2 当str1与str2不同时,返回True Str 当str不是空字符时,返回True -n str 当str的长度大于0时,返回True -z str 当str的长度是0时,返回True

例如:文件b.sh如下#!/bin/bashA1="abc"B1="abc"C1="abcde"if [ "$A1" = "$B1" ]thenecho "A1=B1"fiif [ "$A1" != "$C1" ]thenecho "A1<>C1"fiif [ -n "$A1" ]thenecho "$A1 length>0"fi输出结果:A1=B1A1<>C1abc length>0

得到字符串长度,使用方法:expr length para#para代表字符串变量 截取字符串,使用方法:${para:X1:X2} #para代表字符串变量参数,X1代表截取位置,X2代表截取长度,可省略子串删除,使用方法:{string#substring}#从string中删除第一个子串substring;子串替换,${string/substring/replacement}使用$replacement来替换第一个匹配的$substring.${string//substring/replacement}使用$replacement来替换所有匹配的$substring.

如文件b.sh#!/bin/bashstring1=teststring expr length $string1 #字符串长度 echo ${string1:0} #输出字符串 echo ${string1:1} #输出子字符串,从第二个字符开始到字符串结尾 echo ${string1:1:3} #输出第1至3个字符 echo ${string1#test} #删除字符串中的test子串 echo ${string1/test/replace} #将字符串中的子串test替换为replace 输出结果: 10teststringeststringeststring判断语句

Int1 -eq int2 #当int1等于int2时,返回True Int1 -ge int2 #当int1大于/等于int2时,返回True Int1 -le int2 #当int1小于/等于int2时,返回True Int1 -gt int2 #|当int1大于int2时,返回True Int1 -ne int2 #当int1不等于int2时,返回True

实例:如下文件 b.sh#!/bin/bashint1=3int2=4if [ $int1 -eq $int2 ] thenecho "int1=int2"elseecho "int1<>int2"fi

执行结果:Int1<>int2

实例:如文件b.sh#!/bin/bashint1=3int2=4if [ $int1 -ge 1 ] && [ $int2 -le 7 ]thenecho "int1>=1 and int2<=7" fiif [ $int1 -ge 1 ] || [ $int2 -le 1 ]thenecho "int1>=1 or int2<=1" fi

执行结果:int1>=1 and int2<=7int1>=1 or int2<=1:if 条件语句

语法:if [ 条件 ]then #符合条件表达式 else #不符合条件表达式fi #结束条件详细例子在本文档中各实例中均有介绍选择比较运算符,从下面的条件中选择出一个复合条件的表达式

如文件:b.sh #!/bin/basha1=2;case $a1 in1)echo "a1=1";;2)echo "a1=2";;esac

执行结果:a1=2以下列出三种常用的循环语句的用法,三种程序实现相同功能For 循环While循环Until循环

实例:b.sh#!/bin/bashfor i in 1 2 3 4 5 doecho “$i”done&实例:b.sh#!/bin/bashi=1while [$i –le 5]dolet “ i += 1 ”echo “$i”done实例:b.sh#!/bin/bashi=0until [ $i -eq 5 ]dolet " i += 1 "echo "$i"done

输出结果

12345输出结果

12345输出结果

12345中的函数运用

函数声明:Function_name() #声明函数{command #函数的主体,执行的命令;}

例如:b.sh#!/bin/bashtestfunction() #函数声明和处理过程 {echo "this is a test function" }testfunction #函数调用

执行结果:this is a test function

函数中的局部变量用local声明,变量的作用范围是本函数内部,函数执行完毕后局部变量被删除;如下实例b.sh#!/bin/bashabc=112233 #声明全局变量abclocalpara() #定义函数{local abc=123 #定义局部变量abc,注意区分上面的abcecho "local para abc is $abc" #输出局部变量}localpara #调用函数,输出局部变量abc echo "abc is $abc" #输出全局变量abc,变量值没有改变 执行结果: local para abc is 123abc is 112233脚本文件的参数

文件参数在shell脚本中使用参数的方法如下:./b.sh start #start 就是第一个参数

调用方法:./b.sh test1 输出结果是:this is runpara1./b.sh test2 输出结果是:this is runpara2

特殊的文件参数$0 脚本程序名称$n 程序文件的第n个参数$* 程序文件的所有参数$# 程序文件参数的个数 $$ 程序文件执行时的PID

看如下脚本文件b.sh#!/bin/bashrunpara1() #函数声明 {echo "this is runpara1" }

runpara2() ##函数声明 {echo "this is runpara2" }if [ $# -gt 0 ]thenecho “para count >0”fi

case $1 in # $1 代表第一个参数的值 test1) #如果参数是test1就执行函数runpara1 runpara1;;test2)runpara2;;esac

如下文件 b.sh#!/bin/bashtestfunction () #声明函数{if [ -z "$1" ] #判断函数是否存在参数($1)thenecho "no para in function" #无参数处理过程elseecho "function's paraname is "$1"" #有参数处理过程fi}testfunction start #执行函数,函数的参数是start执行结果:function’s paraname is start声明类型变量

declare –r abc=”test string” #声明abc是只读类型declare –i int1 #声明int1是整数类型declare –a arr1 #声明arr1为数组变量declare -f 函数名(可选) #当存在函数名时,只会列出文件中的名称是所写函数的定义,如果不存在函数名,则列出所有函数的声明

看下面的例子b.sh:#!/bin/bashdeclare -r abc="test declare" #声明只读变量abc echo "echo $abc"abc="read only" #将会出现错误提示,因为abc是只读变量 echo "echo $abc" #打印abc变量,还是“test declare”没有变化

declare -i int1 #声明整型变量int1 int1=12;int1="test string" #给整型赋值为字符串,错误 echo "$int1"int1=int1/3 #整型变量可以直接使用操作符/ echo “$int1”

func1() #声明函数func1 {echo "test function"}func2() #声明函数func2 {echo "test function"}declare –f #显示所有函数 declare -f func1 #显示函数func1

文件的执行结果如下:echo test declare./b.sh: abc: readonly variable #只读变量错误提示 echo test declare./b.sh: test string: syntax error in expression (error token is "string") #变量类型错误 124 #显示的是 12/3的结果 declare -f func1 () #显示所有函数 { echo "test function"}declare -f func2 () { echo "test function"}func1 () #显示函数func1 { echo "test function"}文件中的交互功能

程序需要对用户输入的字符进行判断后执行相应的操作如下面的文件b.sh#程序完成的功能是,判断用户输入的名称,如果用户输入的名称不是zhangwei,就继续提示输入,如果用户输入了zhangwei,就提示欢迎字符,程序退出;#!/bin/bashwhile :doecho -n "please input you name:" #提示用户输入 read line #读取用户输入的数据 if [ "$line" = "zhangwei" ] #判断用户输入的数据 thenecho "welcome $line" #显示欢迎信息 exit fidone

转义是一种引用单个字符的方法.一个具有特殊含义的字符前边放上一个转义符(\)就告诉shell这个字符失去了特殊的含义.对于特定的转义符的特殊的含义(在echo和sed中所使用)\n 换行\r 回车\t tab键\v vertical tab(垂直tab),查前边的Ctl-K\b backspace,查前边的Ctl-H\a "alert"(如beep或flash)\0xx 转换成8进制ASCII解码,等价于oxx实例,使用转义符“\”看下文件b.sh#!/bin/bashecho "\v\v\v\v" # 打印字符串”\v\v\v\v .”echo -e "\v\v\v\v" #打印4个垂直tabecho $’\v\v\v\v’ #打印4个垂直tabecho –e “\101” #打印出A,因为A是101的八进制的ascIIecho \z #输出 zecho '\z' #输出 \zecho \\z #输出 \z

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

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

相关文章

linux版车机安装步骤,RedHat Linux 9.0的安装(详细图解安装过程)

RedHat Linux版本:" b, t) b) b# }, t# z- fC& S$ x0 }) GRedHat Linux是目前世界上使用最多的Linux操作系统。因为它具备最好的图形界面&#xff0c;无论是安装、配置还是使用都十分方便&#xff0c;而且运行稳定&#xff0c;因此不论是新手还是老玩家都对它有很高的…

linux中网页播放音乐,Linux_在Linux系统下播放网页中的背景音乐技巧,在Linux中的firefox浏览许多网页 - phpStudy...

在Linux系统下播放网页中的背景音乐技巧在Linux中的firefox浏览许多网页时&#xff0c;很多使用了基于WMP的背景音乐播放器&#xff0c;如部份baidu空间。但firefox默认不支持播放。在LINUX的源中&#xff0c;有一为kaffeine-mozilla-plugin&#xff0c;能在firefox中使用kaffe…

简单了解linux,linux简单了解

今天主要了解下linuxlinux目录结构包含:/&#xff1a;代表根目录bin(binaries):存放二进制可执行文件sbin(super user binaries)&#xff1a;存放二进制可执行文件&#xff0c;只有root才能访问etc(etcetera)存放系统配置文件usr(unix shared resource)&#xff1a;用于存放共享…

C语言多个变量运算存储过程,postgresql函数中的赋值运算和postgresql函数存储过程实现数据批量插入...

今天检查大家写的postgresql函数时&#xff0c;发现有的家伙不遵守postgresql关于函数中的赋值运算表示方式&#xff1a;variable : value注意的是&#xff0c;是:表示赋值运算&#xff0c;而不是单独一个等号。这一点和delphi相似&#xff1f;另外&#xff0c;postgresql中关于…

c语言盗取qq号程序,C++获取本机登陆过的QQ号码示例程序

// FileName: GetQQ.cpp#include "stdafx.h" // 如果编译出错请删除这句#include "GetQQ.h"GetQQ::GetQQ(){}GetQQ::~GetQQ(){}std::vector GetQQ::Init(void){TCHAR pathBuffer[MAX_PATH] {0};::SHGetSpecialFolderPath(NULL, pathBuffer…

夫曼编码译码系统课程设计实验报告(含源代码c++_c语言),哈夫曼编码译码系统课程设计实验报告(含源代码C++_C语言)[1]...

目 录摘 要 ………………………………………………………………………..……………… II Abstract …………………………………………………………………………..………... II 第一章 课题描述………………………..………………………………………………….. 1 1.1 问题描述………

二级c语言评分标准一样吗,计算机二级评分严格吗 步骤错了有分吗

计算机二级考试不是人工阅卷&#xff0c;是由计算机评分&#xff0c;所以是很严格的。计算机二级机器阅卷主要看的是最后的输出文件&#xff0c;如果步骤错了导致结果不正确的话&#xff0c;也是没有分的。计算机二级评分标准计算机二级考试是电脑自动评分的&#xff0c;即上机…

c语言a 寻路算法,JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例

本文实例讲述了JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;完整实例代码如下&#xff1a;A*寻路算法#stage {border: 1px solid lightgray;}window.onload function () {var stage document.querySelector(#stage…

在wsl下运行c语言,在Windows10通过WSL架设linux/gcc c语言学习环境

在Windows10通过WSL架设linux/gcc c语言学习环境零&#xff1a;简单介绍与先决条件中国一般的大学C课程中都使用很过时的编译器来进行教授——比如说什么visual studio 6.0啊&#xff0c;dev c啊。以笔者的眼界所看到的C语言教程中&#xff0c;大多都建议学习者在Linux环境下学…

android二级联动购物车,Android实现二级购物车的全选加反选、总价功能

本文实例为大家分享了Android实现二级购物车的全选加反选、总价的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下MainActivityimport android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;imp…

android studio gradle 自动更新,android studio gradle 两种更新方法更新

又快一年没有使用AS了&#xff0c;正好要查看一个Android项目代码&#xff0c;干脆升级到新版试试看新变化&#xff0c;旧版本为3.1.2&#xff0c;目前最新版本为3.4.2&#xff0c;AS的升级是很简单的直接update等待即可.升级完了&#xff0c;打开GIT下载的项目&#xff0c;启动…

android安全 报告,Android安全检测报告

1.高危 Intent Scheme URL攻击详情&#xff1a;恶意页面可以通过Intent scheme URL执行基于Intent的攻击建议&#xff1a;将Intent的component/selector设置为null2.高危 WebView应用克隆风险详情&#xff1a;APP使用WebView访问网络&#xff0c;当开启了允许JS脚本访问本地文件…

android定时循环,Android AlarmManager实现定时循环后台任务

这篇文章使用AlarmManager实现了Android定时后台循环任务。使用场景&#xff1a;项目需要app每隔一段时间就去服务端请求一次接口&#xff0c;从而更新本地保存的信息。AlarmManager简介AlarmManager是Android中常用的一种系统级别的提示服务&#xff0c;在特定的时刻为我们广播…

android 线性布局蒙层,Android开发 - 掌握ConstraintLayout(一)传统布局的问题

在传统的Android开发中&#xff0c;页面布局占用了我们很多的开发时间&#xff0c;而且面对复杂页面的时候&#xff0c;传统的一些布局会显得非常复杂&#xff0c;每种布局都有特定的应用场景&#xff0c;我们通常需要各种布局结合起来使用来实现复杂的页面。随着ConstraintLay…

android sdk 4.4.4,4.4.4 not in Android SDK manager

问题I need to do some testing with 4.4.4 and it isnt available in my Android SDK Manager?Any ideas on what Im doing wrong?回答1:There is no problem at you Android SDK Manager, you just have to download the API 19.The API 19 is used by all the KitKat devi…

android7.0提示定位,解决android7.0上某些PopuWindow显示位置不正确的问题

网上关于android系统7.0的popupwindow适配的解决方案&#xff0c;基本都是一样的&#xff0c;就是重写PopupWindow里面的方法但是如何进行重写&#xff0c;对于一个初次接触的人来说&#xff0c;是个很头疼的问题。一来是涉及到java基础&#xff0c;二来是涉及到popupwindow的源…

android 全局 窗口,miui12全局自由窗口app

miui12全局自由窗口app是小米最新更新的系统引用了全局自由窗口功能&#xff0c;在你玩游戏或者是追剧的时候&#xff0c;都可以直接在一个页面上聊天&#xff0c;无需切换那么麻烦&#xff0c;支持多种机型进行使用这个功能&#xff0c;多种模式你可以自由的切换使用&#xff…

LeetCode - Medium - 264. Ugly Number II

Topic MathDynamic ProgrammingHeap Description https://leetcode.com/problems/ugly-number-ii/ Analysis 方法一&#xff1a;遍历自然数&#xff0c;逐个判断是否是丑数。这方法很低效。 方法二&#xff1a;动态数组。 We have an array k of first n ugly number. W…

signature=4abdf782f13579fc1b57d94a0c6ce95c,β-lactam-associated eosinophilic colitis

摘要&#xff1a;A 42-year-old man with a history of childhood asthma presented with a 2-week history of watery diarrhoea and marked peripheral eosinophilia in the setting of recent use of cephalexin. His colonoscopy revealed patchy colitis. Biopsies were c…

html文档定义层标记是,jsp练习题目201312

《JSP商务网站设计》复习综合题型一、单项选择题1. 关于分页显示&#xff0c;下列的叙述哪一项是不正确的&#xff1f;()A)只编制一个页面是不可能实现分页显示的B)采用一至三个页面都可以实现分页显示C)分页显示中&#xff0c;记录集不必在页面跳转后重新生成D)分页显示中页面…