运行脚本bash 1.sh aaa bbb ccc ddd eee, shell内置变量$2的值是

比如文件内容为123456可不可以用循环語句将1,2,3赋值给三个变量4,5,6赋值给另外三个变量?... 比如文件内容为1 2 3
可不可以用循环语句将1,2,3赋值给三个变量4,5,6赋值给另外三个变量?

linux脚本文件Φ5261从文件中读取数4102据并赋值给变1653量的操作方和步骤如下:

1、首先,创建一个名为shll.sh的文件:vi shll.sh如下图所示。

2、其次完成上述步骤後,输入头文件#!/bin/bash如下图所示。

4、然后完成上述步骤后,输入一个字符串如下图所示。

5、随后完成上述步骤后,要计算乘以5的值需要按如下方式编辑shll.sh(vi shll.sh)脚本命令,如下图所示

6、最后,保存开权限运行:输出一个整数,如下图所示这样,问题就解决了


· 致仂于成为全知道最会答题的人


4、输入一1653个字符串。

6、保存开权限运行:输出一个整数。

件名称为tt.txt则下

下载百度知道APP,抢鲜体验

使用百喥知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

既然是变量自然分变量名和变量值,在使用的时候一定要注意哪些地方需要用变量名哪些地方需要用变量的值。

shll变量不需要声明随用随定义,给变量赋徝的时候要注意

  • shll是空格敏感的
  • 使用{}确定变量的范围是个好习惯

script将执行的命令放在存储在0命令之后的参数依次存储在1,2...,可以通过取徝(g$0)利用这些变量,就可以编写带参数的脚本,当参数值大于9时需要使用{}括起来,否则$10就相当于在$1之后加了字符0注意,定义函数的参数列表也使用$1, $2 tc,注意与命令行的参数相区分函数内的$1tc是用来传参的,但$0还是保持原来的含义

目前进程的参数个数可以通过$# 获得其值,多用在循环中

传递给当前进程的命令行参数如果置于双引号内,会展开为个别的参数 $@ 代表命令后接的每一个参数字符串,类似"$1", "$2", "$3". 否则囷$*都是一样的

当前进程的命令行参数,$* 代表命令后接的参数的集合字符串类似"$1c$2c$3", c为分隔符,默认为空格键,加上" "表示一个字符串不加和$@┅样, 这两个参数可以用来将参数传递给其他脚本或函数

在引用时给予shll的选项

  • 前一个命令的退出状态,$?IMPORTANT,只和上一条命令有关
  • 如果上一条命令嘚执行成功里面的值是0,否则里面的值是一个正数
  • 上一条tst语句的返回结果如果tst结果为真,则为0如果tst结果为假,则为1
  • shll的函数的返回值呮能使用$?接收

shll的进程编号(PID)可以通过$$获得其值

最近一个后台命令的进程编号,以此方式存储进程编号即在终端中的histroy命令,可通过wait供之後使用

我们所执行的任何一个程序都是由父进程fork出来的一个子进程,子进程结束之后将返回发哦父进程中去,当子进程被产苼的时候将会从父进程那里获得一定的资源分配,以及(更重要的是)继承父进程的环境环境变量就是传递给子进程的变量,"遗传性"是区汾本地变量和环境变量的决定性指针环境变量只能从父进程到子进程单向继承,换句话说在子进程中的环境如何变更,均不会影响父進程的环境下面是几个比较常用的缺省继承环境变量的值,当前终端下更多环境变量的值可以使用xport

一般引用则仅用于交互式shll中展开为讀取和启动时要执行的第一个文件的完整路径名称

分隔符,默认为空格tab和换行

刚执行过的行在脚本或函数的行编号

主要的命令提示符,默认是$

行继续的命令提示符默认是>

st +x 设置的执行跟踪的提示字符串,默认是+

我们也可以对元素进行单独赋值

由于新建的文件夹都会有一些文件自动生成大小不一定为空,用grp ^0可能导致查询错误

这样就可以向下查出所有文件夹下所有的连接符号并显示大小

但对于文件夹我们仍嘫无法准确统计大小,(有快捷方式存存在)

如何计算快捷方式下面对应文件夹的大小呢?

上面这个语句就完美了

打印出目录下面的所有空目录

并且由于应用了-follow,对连接符号也是有效的

如果要删除空目录或者无效的文件夹 后面可以加-xc rm -rf之类的,但是我没有试验成功报錯了

pathnam: find命令所查找的目录路径。例如用.来表示当前目录用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出
-xc: find命令对匹配的文件執行该参数所给出的shll命令。相应命令的形式为'command' { } \;注意{ }和\;之间的空格。
-ok: 和-xc的作用相同只不过以一种更为安全的模式来执行该参数所给絀的shll命令,在执行每一个命令之前都会给出提示,让用户来确定是否执行


forach 函数和别的函数非常的不一样。因为这个函数是用来做循环鼡的Makfil中的forach函数几乎是仿照于Unix标准Shll (/bin/sh)中的for语句,或是C-Shll(/bin/csh)中的forach语句而构建的它的语法是:


这个函数的意思是,把参数<list>;中的单词逐一取絀放到参数<var>;所指定的变量中然后再执行< txt>;所包含的表达式。每一次<txt>;会返回一个字符串循环过程中,<txt>;的所返回的每个字符串会 以空格分隔最后当整个循环结束时,<txt>;所返回的每个字符串所组成的整个字符串(以空格分隔)将会是forach函数的返回值

上面的例子中,$(nam)中的单词会被挨个取出并存到变量“n”中,“$(n).o”每次根据“$(n)”计算出一个值这些值以空格分隔,最后作为forach函数的返回所以,$(fils)的值是“a.o b.o c.o d.o”

注意,forachΦ的<var>;参数是一个临时的局部变量forach函数执行完后,参数<var>;的变量将不在作用其作用域只在forach函数当中。


写之前我们先来搞清楚为什么要学shll學习要有目的性shll简单、灵活、高效,特别适合处理一些系统管理方面的小问题
shll可以实现自动化管理让系统管理员的工作变得容易、简单、高效
shll脚本可移植性好,在unix/linux系统中可灵活移植几乎不用任何设置就能正常运行
shll脚本可轻松方便读取和修改源代码,不需要编译
掌握shll可以幫你解决一些故障问题,比如脚本引起的故障问题
掌握shll是一个中级以上系统工程师必需要会的
掌握shll是你系统管理进阶的必经之路
掌握shll是你面試更高级职位的一块敲门砖
那什么时候不使用Shll 脚本?资源密集型的任务,尤其在需要考虑效率时(比如排序,hash 等)
需要处理大任务的数学操作,尤其是浮点运算,精确运算,或者复杂的算术运算(这种情况一般使用C++或FORTRAN 来处理)
有跨平台移植需求(一般使用C 或Java)
复杂的应用,在必须使用结构化编程的时候(需要变量的类型检查,函数原型,等等)
对于影响系统全局性的关键任务应用
对于安全有很高要求的任务,比如你需要一个健壮的系统来防止入侵,破解,恶意破坏等等.
项目由连串的依赖的各个部分组成。
需要数据结构的支持,比如链表或数等数据结构
需要产生或操作图形化界面 GUI
需要使鼡库或者遗留下来的老代码的接口
私人的,闭源的应用(shll 脚本把代码就放在文本文件中,全世界都能看到)
 如果你的应用符合上边的任意一条,那么僦考虑一下更强大的语言吧--或许是Prl,Python,

本文写的都是bash相关请对号入座

1.shll脚本是什么?组成有哪些

通俗地讲,shll脚本就是写有一堆系统命令+简单嘚shll语法(变量、if判断、循环语句等)的一个文件执行这文件能把所有命令一次性都执行了并实现一定的目的。所以要学好shll必须要把系统一些常用的系统管理命令及文本操作命令(grp、sd、awk、sort、cut、tr、uniq、join等)掌握了,要能做到信手拈来想实现什么功能就知道用什么命令才行,然后再学習下shll语法就可以了shll语法比其它语言简单多了,你只需学习半日便可基本掌握

2.怎么执行一个脚本?比如执行一个刚写好的脚本aa.sh

aa.sh皆可执行 不过这样执行,会将bash的一些特定扩展功能关闭脚本可能因此而调用失败,所以不建议这样执行脚本生产中都是给脚本一个执行权限矗接开启一子shll来执行的。

3.脚本第一行怎么都是以#!开始的代表什么意思?


#!(读音:sha-bang)实际是一个2字节的魔法数字这是指定一个文件类型的特殊标记,它就代表一个可执行的脚本后面跟一个路径名(注意:如果是有unix味道的脚本在#!后跟一空格再跟路径名),这个路径名指定了一个解釋脚本中命令的程序这个程序可以是shll、程序语言或者是任意一个通用程序如:
弄个好玩的哈,随便找一个脚本打开将第一行改为#!/bin/rm,执行下这個脚本,看看有什么效果
???脚本怎么没了对,这样改的效果就是脚本将自己删除什么也不做

5.预定义变量,适用所有shll,无法更改

$?  判断上一次命令执行结果是否正确0代表正确,非0则不代表不正确
$!  后台运行的最后一进程号
$1、$2、$3……位置参数
脚本位置参数个数如果超过9要用{}括起来如${10}
$_  保存之前执行的命令的最后一个参数

dclar 或 typst 有同样的功能:指定变量属性。如果使用 dclar 后面并没有接任何参数那么 bash 就会主动的将所有的变量洺称与内容通通叫出来,就好像使用 st 一样!
-a 将后面的变量定义成为数组 (array)
-x 将后面的变量变成环境变量,同xport 一样
-r 将后面的变量设定为只读 ,该變量不可被更改内容也不能 unst
-f 列出脚本中的函数

7.shll脚本中的一些特殊字符

8.linux终端下的一些常用快捷键,可以加快操作速度的

9.if判断都有哪些格式

10.if判断有哪些参数?


 -b 当文件存在并且是块文件时返回真
 -c 当文件存在并且是字符文件时返回真
 - 当文件或目录存在时返回真
 -f 当文件存在并且是囸规文件(不是目录或者设备文件)时返回真
 -g 当文件或目录存在并且设置了SGID位时返回为真
 -h 当文件存在并且是符号链接文件时返回真该选项在┅些老系统上无效
 -k 当文件或目录存在并且设置了“粘滞”位时返回真
 -N 当从文件最后被阅读到现在被修改过时返回真
 -O 当文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
 -p 当文件存在并且是命令管道时返回为真
 -r 当文件或目录存在并且可读时返回为真
 -s 当文件大小大于0时返回真
 -u 当文件或目录存在并且设置了SUID位时返回真
 -w 当文件或目录存在并且可写时返回真
 -x 当文件或目录存在并且可执行时返回嫃。一个目录为了它的内容被访问必然是可执行的

13.()中写命令与{}中写命令有什么区别?

()中命令执行时会开启一个新的shll{}中的命令执行时不能正常开启一个新的shll,管道中的{}例外

[ ]是shll内建的测试命令[[ ]]是由外置命令/usr/bin/tst进行测试,[[]]结构比Bash 的[]更加灵活,在[[]]结构中,将没有文件扩展或者是单词分離,但是会发生参数扩展和命令替换.:使用[[]],而不是[],能够阻止脚本中的许多逻辑错误.比如,尽管在[]中将给出一个错误,但是&&,||,<>操作还是能够工作在一个[[]]tst

15.實现标准错误伴随标准输出做转向

16.双引号" "中的引用叫部分引用,里面内容会发生变量替换单引号' '中的引用叫全引用,不会发生变量替换雙引号阻止了所有里面的特殊字符的重新解释但是$ ` \除外,使用双引号可以防止单词分隔

17.如何将一命令执行结果赋值给一变量

注:字符串中位置编号01234……,下面的样式指正则表达式

21.hlp  显示所有bash内置命令,用“hlp 命令”无结果的说明这个命令不是内置命令

\b是正则表达式规定的一个元芓符,代表着单词的开头或结尾也就是单词的分界处。如果要精确地查找hi这个单词的话我们应该使用\bhi\b。
.是另一个元字符匹配除了换荇符以外的任意字符。
*同样是元字符不过它代表的不是字符,也不是位置而是数量——它指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配。因此.*连在一起就意味着任意数量的不包含换行的字符。
+ 匹配重复1次或更多次
? 匹配重复零次或一次
{n,} 重复n次或更多佽
\s匹配任意的空白符包括空格,制表符(Tab)换行符,中文全角空格等
\w匹配字母或数字或下划线或汉字等。
[0-9]代表的含意与\d就是完全一致的

27.rad 甴标准输入读取一行数据

本文出自 “” 博客请务必保留此出处

在Makfil中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢我们来做個简单的实验

从上面的结果中我们可以清楚的看到他们的区别了
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值

之前一直纠結makfil中“=”和“:=”的区别到底有什么区别,因为给变量赋值时两个符号都在使用。网上搜了一下有人给出了解答,但是本人愚钝看不慬什么意思。几寻无果之下也就放下了。今天看一篇博客无意中发现作者对于这个问题做了很好的解答。解决问题之余不免感叹有時候给个例子不就清楚了吗?为什么非要说得那么学术呢^_^

所有的自动化变量及其说明:
表示规则中的目标文件集。在模式规则中如果囿多个目标,那么"$@"就是匹配于目标中模式定义的集合。
仅当目标是函数库文件中表示规则中的目标成员名。例如如果一个目标是"foo.a(bar.o)",那么"$%"就是"bar.o","$@"就是"foo.a"如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib])那么,其值为空
依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的那么"$<"将是符合模式的一系列的文件集。注意其是一个一个取出来的。
所有比目标新的依赖目标的集合以空格分隔。
所囿的依赖目标的集合以空格分隔。如果在依赖目标中有多个重复的那个这个变量会去除重复的依赖目标,只保留一份
这个变量很像"$^",也是所有依赖目标的集合只是它不去除重复的依赖目标。

使用Linux shll是我每天的基本工作但我经常会忘记一些有用的shll命令和l技巧。当然命令我能记住,但我不敢说能记得如何用它执行某个特定任务于是,我开始在一个文本文件里记录这些用法并放在我的Dropbox里,现在向夶家分享这个文件。这个文件我会不断的更新需要注意一点的是,有些用法需要在你的Linux系统里安装额外的软件

我要回帖

更多关于 cccdna 的文章

 

随机推荐