① 编写一个shell程序,实现用for循环输出1到20间的奇数
#!/bin/sh
for ((i=1;i<20;i=i+2));
do
echo $i
done
类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
命令行式shell(Command Line Interface shell ,即CLI shell)
例如:
bash / sh / ksh / csh / zsh(Unix/linux 系统)
(1)shell命令行for扩展阅读:
传统意义上的shell指的是命令行式的shell,以后如果不特别注明,shell是指命令行式的shell。
文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理与操作系统之间的交互:等待输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
shell提供了与操作系统之间通讯的方式。这种通讯可以以交互方式,或者以shell script方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。
② powershell命令行如何用forfiles命令调用gcc编译多个文件
forfiles不是Powershell的命令,可以用foreach对文件进行遍历,命令大概如下:
Get-ChildItem-PathF: ew_folder|ForEach-Object{gcc-o$_.FullName}
注解:
gcc的使用及参数我不知道,所以gcc -o $_.FullName只是一个示例。
Powershell获取的都是对象,FullName属性表示该对象(文件)的完整路径。
ForEach-Object可以用%代替,即上面的命令行可以写成
Get-ChildItem-PathF: ew_folder|%{gcc-o$_.FullName}
如有问题请追问,一直交流。
③ shell命令行下的通配符*有什么用
shell下的通配符,一般来说主要是用来匹配文件用的
常用的有三个,或者应该只有三个吧,记得不是很清楚了
*,?,[]
其中*代表任意多个字符,如你cd
/后,这时,*就代表/目录下所有的文件了,echo
*你会看到结果,但不包括所有隐藏的文件,所有隐藏的文件是.*,这里的点号仅仅代表点号而已。当然,你想得到两个o连在一起的文件怎么做了?很简单,就是*oo*,你用echo命令,于是得到了root与boot……
?则是代表单个字符,如echo
???,文件名是三个字符长的都出来的。echo
?i?,于是bin与lib就出来了……
[]则是用来匹配方括号里的任意一个,比如[abc]就匹配a,b,或者c中的任意一个。结合*号,如echo
[abc]*,则是显示所有以a或b或c开头的文件。配合短横线的话,可以匹配一个范围。如要匹配以小写字母开头的文件怎么写了?你不要把所有的小写字母写出来,[a-z]*这样即可,大写字母当然就是[A-Z]了,数字就是[0-9]了,当然也可以合起来写[A-Za-z0-9],不用解释了吧。要记住的是,只是匹配一个而已。再来一个例子:for
i
in
*
;doecho
$i;done。答案嘛,自己试下就知道了。开个shell,随便练下,很容易掌握的。
啰嗦了这么多,希望对您有用。有一点需要注意,就是不要把通配符与正则元字符混淆了……
④ linux的命令行操作和shell的区别
shell翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面。 shell可以通过其条件语句和循环语句等,把一系列linux命令结合在一起,形成一个相当于面向过程的程序,shell script,来实现一些较为复杂的功能。
总括,shell是linux命令集的概称,是属于命令行的人机界面。
免费提供最新Linux技术教程书籍,入门自学书籍《linux就该这么学》,为开源技术爱好者努力做得更多更好
⑤ Linux shell 问题 求解
这是表示foo分别取值三次,并且分别打印出 三个值来,具体其他知识拓展如下:
for 命令
重复执行一系列命令在编程中很常见。通常你需要重复一组命令直至达到某个特定条件,比如处理某个目录下的所有文件、系统上的所有用户或是某个文本文件中的所有行。
bash shell提供了 for 命令,允许你创建一个遍历一系列值的循环。每次迭代都使用其中一个值来执行已定义好的一组命令。下面是bash shell中 for 命令的基本格式。
for var in list
do
commands
done
在 list 参数中,你需要提供迭代中要用到的一系列值。可以通过几种不同的方法指定列表中的值。
在每次迭代中,变量 var 会包含列表中的当前值。第一次迭代会使用列表中的第一个值,第二次迭代使用第二个值,以此类推,直到列表中的所有值都过一遍。在 do 和 done 语句之间输入的命令可以是一条或多条标准的bash shell命令。在这些命令中,$var 变量包含着这次迭代对应的当前列表项中的值。
也可以将 do 语句和 for 语句放在同一行,但必须用分号将其同列表中的值分开: for var in list; do 。
1.1.读取列表中的值
for 命令最基本的用法就是遍历 for 命令自身所定义的一系列值。
[ceshi@jerry jghml]$ cat test1.sh
#!/bin/bash
# basic for command
for test in Alabama Alaska Arizona Arknsas California Colorado
do
echo The next state is $test
done
⑥ 使用for语句创建命令行上所有整数之和的shell程序
你把sum=' expr $sum + $INT '中的单引号要换成反引号
如下:
sum=` expr $sum + $INT `
然后就行了
亲给好评哟!!!!
⑦ 如何利用shell脚本中的eval命令来构造"智能"命令
今天主要介绍一个shell脚本中比较少见的命令--eval
功能说明 :重新运算求出参数的内容。
语 法 :eval [参数]
补充说明 :eval可读取一连串的参数,然后再依参数本身的特性来执行。
参 数 :参数不限数目,彼此之间用分号分开。
eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。eval也可以用于回显简单变量,不一定是复杂变量。
eval的作用是再次执行命令行处理,也就是说,对一个命令行,执行两次命令行处理。这个命令要用好,就要费一定的功夫。下面用几个例子帮助大家理解下。
1、eval一个命令
eval echo相当于echo
2、两次扫描
该命令适用于依次扫描无法完成其功能的变量。
第一步:对eval后面的命令进行扫描,执行变量替换,普通命令保留
第二步:执行变量替换后的命令串
3、获得最后一个参数
4、用eval技巧实现shell的控制结构for
用eval技巧实现shell的控制结构for
输出结果:
注意:bash里有两个很特殊的变量,它们保存了参数列表。
这里我使用了函数递归以及eval实现了for结构。
当执行eval $@时,它经历了步骤如下:
第1步,分割成eval $@
第6步,扩展$@为hostname
第11步,找到内置命令eval
重复一次命令行处理,第11步,找到hostname命令,执行。
eval是对Bash Shell命令行处理规则的灵活应用,进而构造"智能"命令实现复杂的功能。上面提及的命令是eval其中一个很普通的应用,它重复了1次命令行参数传递过程,纯粹地执行命令的命令。其实它是bash的难点,是高级bash程序员的必修技能。
⑧ shell命令有哪些保留字
Bash Shell内建命令和保留字
命令
含义
!
保留字,逻辑非
:
不做任何事,只做参数展开
.
读取文件并在shell中执行它
alias
设置命令或命令行别名
bg
将作业置于后台运行
bind
将关键字序列与readline函数或宏捆绑
break
保留字,跳出for、while、until、select循环
builtin
调用命令的内建命令格式,而禁用同名的函数。或者同名的扩展命令
case
保留字,多重选择
cd
切换当前工作目录
command
找出内建和外部命令;寻找内建命令而非同名函数
continue
保留字,到达下次for、while、until、select循环
declare
声明变量定义变量属性
dirs
显示当前存储的列表
disown
将作业从列表中移除
do
保留字,for、while、until、select循环的一部分
done
保留字,for、while、until、select循环的一部分
echo
打印参数
elif
保留字,if结构的一部分
else
保留字,if结构的一部分
enable
开启和关闭内建命令
esac
保留字,case的一部分
eval
将参数作为命令再次处理一遍
exec
以特定程序取代shell或为shell改变I/O
exit
退出shell
export
将变量声明为环境变量
fc
与历史命令一起运行
fg
将作业置于后台运行
fi
保留字,if循环的一部分
for
保留字,for循环的一部分
function
定义一个函数
getops
处理命令行选项
hash
记录并指定命令的路径名
help
显示内建命令的帮助信息
history
显示历史信息
if
保留字,if循环的一部分
in
保留字,case、for、select循环的一部分
jobs
显示后台运行的作业
kill
向进程传送信号
let
使变量执行算术运算
local
定义局部变量
logout
从Shell中注销
popd
从目录栈中弹出目录
pushd
将目录压入栈
pwd
显示当前工作目录
read
从标准输入中读取一行
readonly
将变量定义为只读
return
从函数或脚本返回
select
保留字,生成菜单
set
设置Shell选项
shift
变换命令行参数
suspend
终止Shell的执行
test
评估条件表达式
then
保留字,if结构的一部分
time
保留字,输出统计出来的命令执行时间,其输出格式由TIMEFORMAT变量来控制
times
针对Shell及其子Shell,显示用户和系统CPU的时间和
trap
设置扑捉程序
type
确定命令的源
typeset
声明变量,定义变量属性,与declare等价
ulimit
设置和显示进程占用的资源限制
umask
设置和显示文件权限码
unalias
取消别名定义
unset
取消变量或函数定义
until
保留字,一种循环结构
wait
等待后台作业完成
while
保留字,一种循环结构
⑨ shell无法执行for循环多行命令
默认的情况下,Shell脚本中的命令是串行执行的,必须等到前一条命令执行完后才执行接下来的命令。shell循环中指令正常使用也是串行的,不过可以使用后台并行执行命令的方法实现并行操作;
例如:
(1)、串行实例:
#!/bin/bash
for(( i = 0; i < ${count}; i++ ))
do
echo commands1
done
(2)、并行实例:
#!/bin/bash
for(( i = 0; i < ${count}; i++ ))
do
{
echo commands1
}&
done
实质就是将操作指令作为后台进程在执行,这样主进程就不用等待前面的命令执行完毕之后才开始执行接下来的命令,实现并行的效果;自己领会咯。