24小时热门版块排行榜    

查看: 1220  |  回复: 5

Gina88

木虫 (正式写手)


[交流] 【求助完毕】程序表示什么意思?

以下的程序有些细节还是不知道什么意思。

#!bin/sh                #!什么意思啊?
rm WAVECAR          为什么要删除WAVECAR啊?
for i in 150 200 250 300 350 400
do                             
cat >INCAR< < SYSTEM=Si
ENCUT=$i               $什么意思啊?
ISTART=0
ICHARG=2
ISMEAR=-5
PREC=Accurate
!                                 !什么意思啊 ?               
echo "ENCUT=$i eV"      什么意思啊
time vasp                    是让跑vasp的意思吗?
E='grep "TOTEN" OUTCAR |tail -1 | awk' {printf "%12.6f \n",$5}           什么意思啊
echo $i  $E >>comment            是将i  E的数值输入到comment文件中吗?
done

[ Last edited by cenwanglai on 2011-3-27 at 21:57 ]
回复此楼

» 收录本帖的淘帖专辑推荐

分子动力学

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
★ ★ ★
Gina88(金币+10): 2011-01-25 21:05:21
ellsaking(金币+3): 感谢详细说明 2011-01-26 10:52:02
建议楼主了解一些linux脚本的基本知识

#!bin/sh                #!shell类型说明,使用的shell是bash
rm WAVECAR         删掉波函数,是为了从新开始弛豫(使用随机波函数)。如果INCAR中设置ISTART=0可以不用删除WAVECAR
for i in 150 200 250 300 350 400
do                             
cat >INCAR< SYSTEM=Si
ENCUT=$i               $i表示该处的值用i的值取代,即150,200,250.....
ISTART=0
ICHARG=2
ISMEAR=-5
PREC=Accurate
!                                前面已经解释过               
echo "ENCUT=$i eV"      屏幕上打印引号内的内容,同上,$i用i的值取代
time vasp                    运行vasp,并且在程序跑完之后打印消耗的时间
E='grep "TOTEN" OUTCAR |tail -1 | awk' {printf "%12.6f \n",$5}        
这一行你要学习grep,tail,awk和管道符号
grep是从文件中提取含有特殊字符的行,在这里是提取OUTCAR中含有TOTEN的行,通过管道符号,将提取出来的这些行交给下一个命令tail -1处理。
tail加一个负数表示显示最后几行,这里-1就是显示最后第一行,同样经过管道符号交给下一个命令处理。
awk是一个文件处理函数,自己学习下吧不是一句两句能说的清楚。这里的意思是将这一行的第五个字符块按照"%12.6f \n"这样的格式输出。这是printf指定的输出格式,google一下你就明白了
echo $i  $E >>comment            这里你的理解没错
done
2楼2011-01-25 18:44:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)


★ ★ ★ ★ ★ ★
ellsaking(金币+3): 感谢详细说明 2011-01-26 10:52:20
sunyang1988(金币+3): 谢谢总结 2011-01-26 11:47:46
1. echo函数:

输出函数,是下令,不能返回值。echo后头可以跟很多 个参数,之间用分号离隔,如:
echo $myvar1;
echo 1,2,$myvar,"bold";

2. print函数:

是函数,可以返回一个值,只能有一个参数。
int print ( string arg )
Outputs arg . Returns 1 , always.

3. printf函数:

int printf ( string format [, mixed args [, mixed ...]] )
Produces output according to format , which is described in the documentation for .
Returns the length of the outputted string.

把笔墨技俩化以后输出,如:
$name="hunte";
$age=25;
printf("my name is %s, age %d", $name, $age);

4. sprintf函数:
string sprintf ( string format [, mixed args [, mixed ...]] )
Returns a string produced according to the formatting string format .

跟printf雷同,但不打印,而是返回技俩化后的笔墨,其他的与printf一样。

5. 具体讲解printf()函数:
printf()函数的调用技俩为:
printf("<技俩化字符串>", <参量表>;

%d 十进制有标记整数
%u 十进制无标记整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x, %X 无标记以十六进制表示的整数
%o 无标记以八进制表示的整数
%g 主动 选择适宜 的表示法

阐发 :
(1). 可以在"%"和字母之间插进数字表示最大场宽。
 ①譬喻: %3d 表示输出3位整型数, 不足3位右对齐。
 ②%9.2f 表示输出场 宽为9的浮点数, 此中小数位为2, 整数位为6, 小数点占一位, 不足9位右对齐。
 ③%8s 表示输出8个字符的字符串, 不足8个字符右对齐。
 ④假如字符串的长度、或整型数位数高出 阐发 的场宽, 将按着实 际长度输出。
 ⑤浮点数, 若整数部分 位数高出 了阐发 的整数位宽度, 将按实际 整数位输出;
 ⑥小数部分 位数高出 了阐发 的小数位宽度, 则按阐发 的宽度以四舍五入输出。
 ⑦若想在输出值前加一些0, 就应在场宽项前加个0。
  譬喻: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度为4位。
  ⑧假如用浮点数表示字符或整型量的输出技俩, 小数点后的数字代表最大宽度, 小数点前的数字代表最小宽度。
  譬喻: %6.9s 表示表现一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。

(2). 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。
    ①譬喻: %ld 表示输出long整数
    ②%lf 表示输出double浮点数

(3). 可以独霸输出左对齐或右对齐, 即在"%"和字母之间介入一个"-" 号可阐发 输出为左对齐, 不然为右对齐。
  ①譬喻: %-7d 表示输出7位整数左对齐
  ②%-10s 表示输出10个字符左对齐

(4). 一些出格规定 字符
    ①\n 换行
    ②\f 清屏并换页
    ③\r 回车
    ④\t Tab符
    ⑤\xhh 表示一个ASCII码用16进表示,
    ⑥此中 hh是1到2个16进制数

[ Last edited by Gina88 on 2011-1-25 at 21:55 ]
3楼2011-01-25 21:50:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)


★ ★ ★
ellsaking(金币+3): 感谢详细说明 2011-01-26 10:52:34
shell的种类   

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的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。   

Linux并没有冷落其他shell用户,还包括了一些流行的shell如ash、zsh等。每个shell都有它的用途,有些shell是有专利的,有些能从Internet网上或其他来源获得。要决定使用哪个shell,只需读一下各种shell的联机帮助,并试用一下。

用户在登录到Linux时由/etc/passwd文件来决定要使用哪个shell。例如:   
# fgrep lisa /etc/passwd   lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash
shell被列每行的末尾(/bin/bash)。

[ Last edited by Gina88 on 2011-1-25 at 22:15 ]
4楼2011-01-25 22:12:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gina88

木虫 (正式写手)


★ ★ ★
ellsaking(金币+3): 感谢详细说明 2011-01-26 10:52:42
引用回帖:
Originally posted by sunyang1988 at 2011-01-25 18:44:05:
建议楼主了解一些linux脚本的基本知识

#!bin/sh                #!shell类型说明,使用的shell是bash
rm WAVECAR         删掉波函数,是为了从新开始弛豫(使用随机波函数)。如果INCAR中设置ISTART=0可以 ...

首先非常感谢版主的回答,非常详细。我也上网查了查这些东西,还是有些东西不能明白。

我的计算是在集群计算机上的。
我用telnet或者SSH连接集群计算机的。
上面的程序是在telnet或者SSH连接时的命令模式下。
直接用vi进行编辑的吗?编辑后要不要保存退出来啊?退出来后它就直接运行了吗?
还是事先建一个文件,再将上面的程序写进去的?如果是,建的文件名字是什么呢?
然后就和以前的一样用vasp.lsf运行吗?

还有:cat >INCAR<可不可以省略啊,不是已经有<<表示输入了吗?
#是不是注释行啊,这样!也可以省略了啊?

grep那一行,既然grep提取的是一行,管道符又是将前面的结果交给下一个命令,而tail -1又表示显示最后一行。那是不是tail -1可以省略了呢,因为grep提取的只有一行啊。或者tail 可以被more less head等代替啊?

[ Last edited by Gina88 on 2011-1-25 at 22:45 ]
5楼2011-01-25 22:33:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
★ ★
Gina88(金币+10): 2011-01-26 19:56:58
gzqdyouxia(金币+2): 谢谢详细指导 2011-01-27 10:00:12
可以用vi编辑器,编辑完当然要保存退出
保存退出后看下它的权限,如果不是可执行文件就“chmod +x 文件名”
文件名自己取,比如xxx.sh
运行时./xxx.sh就可以
cat >INCAR<不可以省略,如果没有这一符号相当于cat INCAR就是打印INCAR的内容
前面加#是注释,可以省略。第一行#!不一样,是指定shell类型,不是注释
不可以省略tail -1静态计算只有一行,驰豫会有N多行,最后一行是驰豫结束的结果
tail ,head 与more, less是不一样的,具体你可以百度一下这里用tail最合适
6楼2011-01-26 11:49:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Gina88 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见