德才手游网:十大热门手游排行榜2023前十名,十大热门手机应用排行榜2023前十名,让你Get最新手游应用、分享你的热辣点评。
网站地图
你的位置: 首页 > 游戏资讯 > 操作系统

linux shell教程 细说shell编程

  • 2023-03-15 12:20:19
  • 来源:未知
  • 在手机上看

    扫一扫立即进入手机端

  Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。

  一、什么是shell

  当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。

  当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的command.com所做的一样,所不同的是,在DOS中,command.com只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。

  二、几种流行的shell

  目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型:

  #echo $SHELL

  $SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令:

  #shell-name

  来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令:

  $exit

  可以退出这个子shell。

  使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍:

  1.ash

  ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。

  2.bash

  bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色:

  (1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。

  (2)自动通过查找匹配的方式给出以某字符串开头的命令。

  (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。

  3.ksh

  ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。

  4.csh

  csh是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh。

  5.zch

  zch是Linux最大的shell之一,由Paul Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的shell的。

  3. shell程序设计(基础部分)

  其实作为命令语言交互式地解释和执行用户输入的命令只是shell功能的一个方面,shell还可以用来进行程序设计,它提供了定义变量和参数的手段以及丰富的程序控制结构。使用shell编程类似于DOS中的批处理文件,称为shell script,又叫shell程序或shell命令文件。

  1.shell基本语法

  shell的基本语法主要就是如何输入命令运行程序以及如何在程序之间通过shell的一些参数提供便利手段来进行通讯。

  (1)输入输出重定向

  在Linux中,每一个进程都有三个特殊的文件描述指针:标准输入(standard input,文件描述指针为0)、标准输出(standard output,文件描述指针为1)、标准错误输出(standard error,文件描述指针为2)。这三个特殊的文件描述指针使进程在一般情况下接收标准输入终端的输入,同时由标准终端来显示输出,Linux同时也向使用者提供可以使用普通的文件或管道来取代这些标准输入输出设备。在shell中,使用者可以利用“>“和“<“来进行输入输出重定向。如:

  command>file:将命令的输出结果重定向到一个文件。

  command>&file:将命令的标准错误输出一起重定向到一个文件。

  command>>file:将标准输出的结果追加到文件中。

  command>>&file:将标准输出和标准错误输出的结构都追加到文件中。

  command

  (2)管道pipe

  pipe同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下:

  command1| command2[| command3...]

  也可以连同标准错误输出一起送入管道:

  command1| &command2[|& command3...]

  (3)前台和后台

  在shell下面,一个新产生的进程可以通过用命令后面的符号“;“和“&“来分别以前台和后台的方式来执行,语法如下:

  command

  产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。

  command &

  产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。

  2。shell程序的变量和参数

  像高级程序设计语言一样,shell也提供说明和使用变量的功能。对shell来讲,所有变量的取值都是一个字符串,shell程序采用$var的形式来引用名为var的变量的值。

  Shell有以下几种基本类型的变量:

  (1)shell定义的环境变量

  shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还可以重新定义,常用的shell环境变量有:

  HOME:用于保存注册目录的完全路径名。

  PATH:用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。

  TERM:终端的类型。

  UID:当前用户的标识符,取值是由数字构成的字符串。

  PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。

  PS1:主提示符,在特权用户下,缺省的主提示符是“#“,在普通用户下,缺省的主提示符是“$“。

  PS2:在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\“然后回车,或者当用户按回车键时shell判断出用户输入的命令没有结束时,显示这个辅助提示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是“>“。

#p#副标题#e#

  (2)用户定义的变量

  用户可以按照下面的语法规则定义自己的变量:

  变量名=变量值

  要注意的一点是,在定义变量时,变量名前不应加符号“$“,在引用变量的内容时则应在变量名前加“$“;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符串都要用双引号括起来。

  在编写shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。

  有时我们想要在说明一个变量并对它设定为一个特定值后就不在改变它的值,这可以用下面的命令来保证一个变量的只读性:

  readly 变量名

  在任何时候,建立的变量都只是当前shell的局部变量,所以不能被shell运行的其他命令或shell程序所利用,export命令可以将一局部变量提供给shell执行的其他命令使用,其格式为:

  export 变量名

  也可以在给变量赋值的同时使用export命令:

  export 变量名=变量值

  使用export说明的变量,在shell以后运行的所有命令或程序中都可以访问到。

  (3)位置参数

  位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的,第二个替换,依次类推。是一个特殊的变量,它的内容是当前这个shell程序的文件名,所以,不是一个位置参数,在显示当前所有的位置参数时是不包括的。

  (4)预定义变量

  预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的,常用的shell预定义变量有:

  $#:位置参数的数量

  $*:所有位置参数的内容

  $?:命令执行后返回的状态

  $$:当前进程的进程号

  $!:后台运行的最后一个进程号

  :当前执行的进程名

  其中,“$?“用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。

  “$$“变量最常见的用途是用作临时文件的名字以保证临时文件不会重复。

  (5)参数置换的变量

  shell提供了参数置换能力以便用户可以根据不同的条件来给变量

游戏推荐

apex呼叫补给仓点了没反应(apex新手教程呼叫) f1操作方法(f11操作教程) 《斗罗大陆魂师对决》锐意进取教程(斗罗大陆魂师对决小技巧) hiredops新手教程(hiredops怎么玩) dayz技巧(dayz操作教程) dayz开服教程(dayz官服新手教程) 宝可梦剑盾建模(宝可梦剑盾建模教程) 八方旅人最高伤害教程(八方旅人最强技能) epic正当防卫4汉化教程(epic正当防卫4简体中文) lol手游拳头注册教学(lol手游拳头账号注册教程) 《逃跑吧少年》自走球获得方法(逃跑吧少年走位教程) lol亚索双风教程(2021亚索双风技巧) x4基石势力地图(x4基石教程任务) switchfc游戏在哪里(switch玩fc教程) unturned怎么调中文教程(unturned如何调中文) 《人类黎明》基础操作教程攻略全集(人类黎明小技巧) apex在哪设置跳伞动作(apex跳伞教程) cod16新手教程门怎么开(cod16新手教程怎么进) 《橙心优选》账号注销教程(橙心优选账户怎么注销) apex新手教程呼叫补给仓没反应(apex使用绝招技能呼叫补给箱) 《武装突袭3》游戏操作方法介绍(武装突袭三怎么玩新手教程) lol手游安卓教程(lol手游安卓登录教程) 《怪物猎人:崛起》克劳德捏脸教程怎么做(怪物猎人崛起贞德捏脸) lol台服账号注册教程(lol台服账号注册教程图片) 《地图》设置小度语音唤醒教程(地图小度小度语音唤醒功能) 《生化危机2:重制版》模型修改教程(生化危机2怎么改mod) 《黑猫奇闻社》第五章全结局教程(黑猫奇闻社为什么不公测) 《人类跌落梦境》第四关怎么过(人类跌落梦境第四关怎么过视频教程) grounded怎么开作弊(grounded游戏教程) 2047怎么玩(2047新手教程) 矮人要塞传奇模式是什么模式(矮人要塞新手教程) switch暗黑3联机教程(switch暗黑3如何联机) 《暗黑破坏神3》switch版联机攻略(switch暗黑破坏神3联机教程) 《洛克王国》拾桂寻忆教程(洛克王国采集) subverse实验室怎么升级(subverse新手教程过不去) 《帝国时代4》游戏玩法背景分享教程(帝国时代4网游) 矮人要塞神殿的选项在哪打开(矮人要塞新手教程) 《怪物猎人:崛起》联机教程手机版(怪物猎人崛起怎么联机玩) dune3合成器教程(k0rgl3合成器) 《彩虹坠入》手柄设置教程图解(《彩虹坠入》手柄设置教程图解视频) 《鬼泣5》帧数提升方法分享教程(《鬼泣5》帧数提升方法分享教程) 暗黑地牢道具使用(暗黑地牢道具使用教程) 2077战斗教程(赛博朋克2077怎么练斗殴) carparking怎么做任务(carparking过关教程) nba2k15怎么调中文(nba2k15设置中文教程) 暗黑破坏神2装备打孔教程(暗黑破坏神2重制版如何给装备打孔) 60秒怎么玩(60秒怎么玩新手快速上手必看教程) dnf手游韩服教程(dnf手游韩服叫什么名字) 《英雄联盟》自我静音关闭方法教程(《英雄联盟》自我静音关闭方法教程下载) 《进击的巨人2》战斗技巧指南(进击的巨人2教程) 《英雄联盟》lol台服快速教程(《英雄联盟》lol台服快速教程下载) 《古剑奇谭3》试玩版全boss打法教程(古剑奇谭3试玩版评测) 《骑马与砍杀2》好用mod安装推荐教程(《骑马与砍杀2》好用mod安装推荐教程视频) apex新手教程呼叫补给仓没反应(apex英雄新手教程呼叫补给仓没反应) 《全面战争:战锤2》袭扰斩将教程攻略(战锤2妨碍补员) 《我的世界》附魔台怎么使用教程(《我的世界》附魔台怎么使用教程) f1赛车设置(f1赛车教程) epic正当防卫4汉化教程(epic正当防卫4怎么设置中文) 《妙奇星球》新手怎么玩教程(妙奇星球怎么得新角色) x4基石警察命令(x4基石教程任务) 《猎杀:对决》快速赚钱方法解析(猎杀对决新手教程) 《生化危机2:重制版》模型修改教程(生化危机2重制版mod修改器怎么用) 《雷霆一击》防御进阶攻略介绍大全(雷霆一击新手教程怎么过) xbox360自制系统图文教程(xbox360自制系统教程17551) 《地铁跑酷》双人玩法开启方法教程(地铁跑酷多人对战) switch注册账号教程(nintendoswitch官网) 《fgo》新年任务教程攻略(《fgo》新年任务教程攻略视频) ps5备份恢复教程(ps5备份还原教程) 暗黑地牢修改教程怪癖(暗黑地牢修改人物怪癖) 《阴阳师》灵染试炼阵容推荐教程(阴阳师染井试炼三) lol手游账号注册教学(lol手游注册教程) subverse战旗玩法(subverse战棋教程动不了) 暗黑地牢修改教程怪癖(暗黑地牢修改怪癖) 《人类黎明》基础操作教程攻略全集(人类黎明技能图解) 《原神》秘宝迷踪怎么玩教程(原神秘宝迷踪位置) 《揍击派对》在哪里买的(揍击派对怎么玩有教程吗) gtfo技巧(gtfo新手教程) 《斗罗大陆魂师对决》小白外传打法教程(小七手游斗罗大陆魂师对决) 《明日方舟》怎么安装模组教程(明日方舟模组使用方法) switch暗黑破坏神3联机教程(ns暗黑破坏神3如何联机) 《饥荒》控制台指令教程(饥荒控制台指令怎么用) switch暗黑3修改装备(ns暗黑3装备修改教程) 《博德之门3》创建角色教程攻略(博德之门3新手教程) 《fgo》新年任务教程攻略(《fgo》新年任务教程攻略) lol手游安卓教程(lol手游安卓安装教程) 《阴阳师》海忍秘闻番外阵容最强教程(《阴阳师》海忍秘闻番外阵容最强教程下载) 《军团战棋》新手教程攻略(《军团战棋》新手教程攻略图) idm器使用技巧(idm的使用教程) switch上星之卡比在哪(switch星之卡比教程) 《原神》北斗怎么配队伍(原神北斗玩法讲解及队伍搭配北斗打法教程分享) 暗黑破坏神3教程(暗黑破坏神3基本操作) apex加载完蓝条进不去游戏教程(apex加载完蓝条自动关闭) 《咸鱼之王》最强红将推荐教程(咸鱼之王在哪里玩) 《灭火先锋》游戏配置要求有哪些(灭火先锋新手教程) ns墨西哥服买游戏(ns墨西哥服买游戏教程视频) 《原神》秘宝迷踪怎么玩(《原神》秘宝迷踪怎么玩教程) 《梦想养成计划》快速升级技巧攻略(梦想养成计划新手教程) lol手游东南亚服注册教程(英雄联盟手游东南亚服注册) nds火焰纹章凹点教程(gba火焰纹章凹点) 《暗黑地牢》开局心得分享(暗黑地牢新手教程) 傲气雄鹰技巧(傲气雄鹰教程) 《人类黎明》基础操作教程攻略全集(人类黎明详细攻略) 2077黑客破解方法(赛博朋克2077黑客教程怎么过) jump大乱斗键盘设置教程(jump大乱斗键盘设定在哪) lol手游台服充值方式(lol手游台服充值教程) 《战术小队》新手兵种选择推荐图(战术小队新手教程怎么过) 2k20后撤步教程(nba2k20后撤步教学) lol手游版韩服注册账号教程(lol手游版韩服注册账号教程在哪) noita新手(noita新手教程) 暗黑地牢新手教程(暗黑地牢小技巧) 《暗黑破坏神3》switch版材料修改教程攻略(ns暗黑破坏神3修改教程) 《风色幻想命运传说》3-3-2通关教程讲解(《风色幻想命运传说》3-3-2通关教程讲解图片) 《怪物猎人:崛起》锁定教程(怪物猎人崛起锁定怪物的按键) 《僵尸世界大战》白板职业速刷5星和经验教程哪个好(僵尸世界大战最快练职业等级) 《枪火重生》狗子新手玩法指南攻略(枪火重生狗子详细教程) 《雷霆一击》新手弩手攻略大全(雷霆一击新手教程怎么过) 《我的世界》地狱门怎么制作手机版(我的世界地狱门怎么做视频教程) 暗黑破坏神2手柄设置方法及玩法教程(暗黑破坏神2手柄控制不了) lol安妮教程(联盟安妮怎么玩) x4太空服装备(x4基石太空服教程) 《风色幻想命运传说》3-3-2通关教程讲解(《风色幻想命运传说》3-3-2通关教程讲解) 《饥荒》哈姆雷特新手开局流程攻略(饥荒哈姆雷特新手教程) 《恐怖黎明》新dlc秘境进入方法分享(《恐怖黎明》新dlc秘境进入方法分享教程) 《物质世界》制作物品方法介绍怎么写(物质世界教程) 《雨中冒险2》3d打印机使用原理分享教程(雨中冒险杂草丛生的3d打印机) lol手游台服怎么注册教程(英雄联盟手游台服账号怎么注册账号) lol提莫怎么玩厉害(lol提莫技能介绍视频教程) noita操作说明(noita新手教程) 《fifa19》全花式动作操作教程攻略大全(fifa19实用技巧) 《骰子元素师》怎么升级最快(骰子元素师修改教程) noita新手教程(noita新手攻略) 《梦想新大陆》宠物培养教程(梦想新大陆宠物技能哪个好) 《动物派对》快速清醒方法解析pdf(动物派对新手教程视频) grounded怎么变大(grounded教程怎么打开) dayz技巧(dayz新手教程) 《我的世界》魔法金属守护精灵珍珠怎么获得的(我的世界魔法金属精铸教程) 《我的世界》珍妮mod基岩版教程手机(我的世界珍妮模组教程) 矮人要塞动物训练为什么不训练狗呢(矮人要塞新手教程) 暗黑破坏神不朽教程(暗黑破坏神不朽入门小白须知) 《上行战场》大型boss及人海打法技巧分享教程(上行战场全流程) mcmod深渊国度(mc深渊国度教程) steep新手教程怎么过(steep新手教程在哪) timberborn教程(timbertimbre) openroadsdesigner安装教程(openroadsdesigner中文界面) 矮人要塞屠宰需要选任务吗(矮人要塞新手教程) 《暗黑破坏神3》switch版双开方法教程(switch暗黑3怎么双开) 《电竞俱乐部》mod制作教程(电竞俱乐部手游mod) 《和平精英》实名认证怎么修改密码(和平精英实名认证修改教程) xbox360自制系统教程升级(xbox360如何自制系统) 《贪婪洞窟2》原初试炼全关卡教程攻略(《贪婪洞窟2》原初试炼全关卡教程攻略大全) 《全面战争:战锤2》战车袭扰教程攻略(全战战锤2战车流) 《装机模拟器2》图文攻略教程指南及试玩解析(装机模拟器第二关) 艾兰岛木板怎么做(艾兰岛新手教程视频) gta5穿越机mod(gta5穿越机教程) lol手游台服注册教程(lol手游台服怎么注册视频教程) 《lol手游》日服如何注册账号和密码(英雄联盟手游日服账号注册教程) 《战地5》大幅度提高帧数方法分享教程(战地5游戏内提高帧数设置) 《动物派对》打架有哪些技巧和方法(动物派对新手教程视频) 《我的世界》盾牌制作方法教程盾牌怎么做(我的世界盾牌怎么做1.7.10) fifa19任意球怎么踢弧线(fifa任意球教程) 《金铲铲之战》平民精英战士阵容教程(金铲铲之战英雄搭配装备) 《雨中冒险2》装弹手教程怎么过(雨中冒险2子弹带) lol手游台服怎样注册(lol手游台服注册教程) dune3合成器教程(合成器多少键) 暗黑地牢改贴图(暗黑地牢改贴图教程) f1游戏教程(f1游戏2020) mmorpg大亨2教程(mmorpg大亨2技能参考) 《我的世界》魔法金属农耕篇教学(我的世界魔法金属mod教程) ns暗黑3更新中文教程(ns暗黑3怎么更新中文) 《迷你世界》真假狼少年怎么玩教程(迷你世界真假方块怎么做) apex新手教程bug(apex新手教程不能切换武器) 《荒野大镖客2》无限获取金条教程(荒野大镖客2无限拿金条) 《魔渊之刃》冰法玩法攻略图(魔渊之刃冰法视频教程) lol手游如何注册账号(lol手游如何注册账号教程) lol提莫技能介绍教程(提莫技能详解) Linux 微信农场状态设置教程-微信农场状态设置方法
更多

手机游戏排行榜