GE脚本源码
-gt是大于的意思。
-eq是等于的意思。
-ne是不等于的意思。
-ge是大于等于的意思。
-lt是小于的意思。
-le是小于等于的意思。
B. 关于mel脚本语言的编写与使用
ge(Maya内置语言)的缩写,是一种强大的命令和脚本语言,让你直接控制Maya的特征、进程和工作流程。mel能做什么,不能做什么?能做的mel有一个很重要的功能是编写界面,Maya的整个界面是用mel编写的,Maya中的所有界面元素都可以编写到你自己的mel程序界面中,你可以用mel跟据自己的习惯定制自己的操作界面。Maya中的所有的按钮命令都是通过mel来调用的,你可以记录并把其中一些命令组合起来,通过一键或按钮来自动执行这一组命令,就像PhotoShop里的Actions一样。Maya中的每一步操作都是在执行mel,因此Maya的任何一个功能,能做的任何一项操作,都可以加到你自己的mel程序中。mel有着和c语言类似的语法,有强大的字符串处理功能,还包含一些较为低层的命令(比如说获取选择物体的名称和获取点在空间中的坐标值等命令),可以编写一些Maya中没有的,较为复杂的功能。不能做的mel是一种脚本语言,受脚本解释器(Command Engine)和Maya内置命令的影响,还是有很多局限的。mel不能使用ActiveX插件。mel只能根据Maya中已有的命令(dll或mll中注册过的命令)进行扩展,无法直接调用dll模块中的函数。我们平常使用的dll或exe程序文件是经过编译器优化的二进制文件,命令的执行速度非常快。mel脚本语言是文本,有一个脚本解释器分析的过程,命令的执行速度较慢,大约要慢20倍。mel不支持指针,不能对内存进行直接操作。这就导致了很多方面的效率超级低下,对内存的间接操作可能会使运行速度降低100倍甚至1000倍以上。不过这样也有一个不容争辩的好处,就是不会产生内存泄漏,保障了Maya的稳定性。mel不能读写二进制文件。既然mel不支持指针,不支持数据结构,就算能够读写二进制文件意义也不大。mel不能编写程序渲染器、播放器;不能编写Maya中不存在的界面元素,如TreeView、RichEdit、透明窗口等;不能编写读取二进制文件的程序,如3dmax(*.max)、LightWave(*.lwo,*.lw)等。有人问过mel能不能编写病毒问题。答案是肯定的。编写mel病毒不需要什么高超的技能,只要通过mel调用dos命令或 JavaScript/VBScript命令就行了。编写病毒是一件损人不利己的事,mel病毒决对不能代表编写者的技术高深,只能说明他的素质低劣。 mel病毒极其罕见,只听说国内有人编过,并害了自己人。如果万一你被mel病毒格式了硬盘或删除了文件,可以用EasyRecover之类的程序来恢复,但有一点一定要记住,就是在恢复文件之前千万不要对受损的硬盘进行写操作!包括不能把恢复的数据存到受损的硬盘上!否则再厉害的高手也救不了你。学Maya一定要学mel吗?不一定非要学mel。但由于Maya与mel的关系太密切了,Maya的用户界面就是用mel编写的,你在Maya中的每一步操作都是在执行mel,你也经常会在表达式里用到mel,或使用别人编写的外部mel程序,这一切都要求你至少要对mel有一个初步的了解。可以先学mel再学Maya吗?不可以。只有先熟悉的Maya的操作后才可以学mel。一般至少学两个月以上的Maya,才可以学mel。学mel是否要有编程基础?是否应该先学C语言再学mel?有编程基础的确会对学mel有很大帮助,但这并不是说学mel一定要有编程基础。C语言和Java语言虽然在语法上与mel很相似,但在编程的思路方面有很大差距,mel更注重代码的简洁而非代码运行的高效率。由于mel是不需要编译的脚本语言,对一些编程的规范要求不是很严格,学习起来会比C或Java更简单一些。学mel是否要学好数学?是否要学好图形学?如果你是学理科的,而且以后打算在3D图形编程这方面发展,那么学好数学和图形学是必须的。如果你是搞艺术的,学mel只是为了辅助Maya作图,那么你就少在数学和图形学上浪费时间。mel是比较高层的脚本语言,一般都是直接调用Maya中已经编好的算法,你只要熟练掌握Maya的操作就行了。如果你有比较好的图形学基础,可能反而会不喜欢使用mel,因为很多优秀的算法无法用mel实现 - mel的速度太慢了。如何编写mel?mel是脚本语言,这就意味着你可以用任何文本编辑器来编写,比如写字板、记事本等。Maya自带的编辑器不好用,所以我们一般使用外部编辑器来编写mel。比较专业的编辑器有:TextPad、 UltraEditor、EditPlus等,有了这些编辑器后还要在网上(比如Highend3d)下载一个mel语法加亮文件,配置好后,才好用。如何使用mel?mel编辑器单行的mel命令,可以直接在命令行(Command Line)执行,也可以在Window > General Editors > Command Shell执行。多行的mel代码,可以在Script Editor中按Ctrl+Enter执行。shelf在Shelf中执行mel。把要执行的代码选中,用鼠标拖放到Shelf上,Shelf上多了一个mel图标,点这个图标,就可以执行你的mel代码了。使用textToShelf命令。比如:textToShelf "cube" "polyCube";可以在当前Shelf上建一个polyCube命令的图标。使用Shelf Editor,添加、编辑你的mel代码,或更改图标。mel文件mel文件的名字必须取与文件中的主函数相同的名字。要把mel文件复制到我的文档/Maya/5.0/scripts目录中,然后在命令行输入主函数名就可以执行这个函数命令。源化脚本(Source Script)Source Script可以使mel文件中的代码或命令立即生效。有几种方法可以Source Script,比如说可以在命令行执行source yourScript.mel,或用Script Editor的File > Source Script...,或直接把你的mel文件拖放到Maya的视窗中。启动文件userSetup.mel要想在Maya每次启动时都执行某一段代码,需要把这段代码加到Maya的启动文件userSetup.mel中。具体方法是在我的文档/Maya/5.0/scripts目录中新建一个文本文件并重命名为userSetup.mel,然后把你的代码加到这个文件中。如果scripts目录中已经存在了userSetup.mel,就把你的代码加到这个文件的结尾。其它也可以通过快捷键、菜单、Marking Menu、mll插件、外部程序文件、JavaScript等方法来调用mel。如何学习mel?学mel最好的参考手册就是Maya的帮助文档,遇到问题时,应首先从这些文档中找答案。我把文档中的Mel Command Reference部分做成了chm文件便于查询,可以点此处下载。要想提高自已的水平,需要多看别人编写的mel代码。<disk>:\\Alias\\Maya6.0\\scripts目录中存放着所有 Maya自带的mel,这些mel可以随意抄写,修改并发布,无版权限制,是我们学习的范本。另外在Maya官方网站和Highend3d也可以下载到大量有用的mel供我们学习。什么是表达式?mel与表达式有什么关系?mel与表达式的关系,Maya帮助文档中讲得很清楚:Expressions have a different purpose from MEL commands and MEL scripts. You enter a MEL command to do a single action, for example, to create a sphere.A MEL script is a list of commands you create to do a sequence of actions, for instance, create a wall-shaped object and apply a brick texture to it.Because you store a MEL script in a file on disk, you can run a script in different scenes and different work sessions, whether today or next year.An expression animates one or more attributes over time in a single scene. By default, an expression executes each frame as an animation plays. After you create an expression, it executes whenever you play the animation-including when you play the animation after saving, closing, and reopening the scene.A MEL command or script is not part of a scene after you execute it. You must execute it again to repeat the action.做几点补充说明:mel是用户与Maya内部机制交流的通道。mel不能直接编写节点和属性,因此往往要使用表达式才能对物体进行实时控制。表达式是与动画不可分割的,表达式与动画的时间(time或frame)有密切的关系,表达式对动画的每一帧都要进行计算。在表达式中可以使用mel,但很多mel用在表达式中是没有意义的,比如说一般不会把编写界面的mel用在表达式中。mel脚本可以用于任何场景。表达式只能用于一个场景,另一个场景即使用到相同的表达式,也要重新创建。表达式主要是对物体的属性进行控制,可以用等号对物体的属性直接取值或赋值,例如:cone.translateX = 3;而mel就必须用getAttr或setAttr来做同样的事情了,例如:setAttr cone.translateX 3;什么是MayaAPI?与mel有什么关系?API - Application Programmer Interface(应用程序界面)。也有人称作SDK,是一种专门给程序员使用的界面或接口。MayaAPI提供了Maya的5个dll文件。这些dll中包含控制Maya的大量类和函数,我们通过这些类和函数用vc++编写自己的dll(mll)文件,这些函数通过Maya的方式(比如用mel命令的形式)来调用。我们常用到的*.mll插件都是通过MayaAPI编写的。MayaAPI比mel更强大,更复杂,效率更高,能做到许多mel做不到的事情,运行速度在mel的十倍以上。MayaAPI的功能主要体现在以下几点:编写mel命令。 执行mel命令。 进行创建物体,选择、缩放、删除等基本操作。 编写manipulator。 编写contexts(tool)。 编写属性节点。 编写材质节点。 文件输入输出。 编写独立的exe控制台程序。MayaAPI程序因为使用vc++,可以使用MayaAPI,MFC,还有很多SDK,几乎是无所限制。不过不能改动Maya底层的东西,不能更改Maya的运作方式。使用MayaAPI,需要有vc++的编程经验,并具有图形学基础
C. neo4j怎么编写自动化脚本
1、shell脚本自动化部署neo4j
#!/bin/bash
host_name=(
wyl01
wyl02
wyl03
)
host_ip=(
10.10.252.151
10.10.252.112
10.10.252.127
)
#neo4j部分信息
NEO4J_VERSION='neo4j-community-3.1.4' #neo4j的版本,注意这里不.tar.gz
NEO4J_INSTALL_PATH='/opt' #noe4j的安装路径
#1 步骤输出 紫色
#2 正确输出 绿色
#3 错误输出 红色
#4 提示输出 蓝色
#5 警告输出 黄色
#根据不同的颜色打印出提示信息
function echo_fun(){
if [ $# -ge 2 ];then
params_num=$1
shift 1
params_mes=$@
else
echo_fun 3 请至少输入两个参数 echo_fun ..
exit
fi
case $params_num in
1)
echo -e "\n\033[35;40;1m ****************************** ${params_mes} ******************************\033[0m\r\n"
;;
2)
echo -e "\033[32;40;1m ${params_mes}\033[0m\r\n"
;;
3)
echo -e "\n\033[31;40;1m ${params_mes}\033[0m\r\n"
;;
4)
echo -e "\033[36;40;1m ${params_mes}\033[0m\r\n"
;;
5)
echo -e "\033[33;40;1m ${params_mes} \033[0m\r\n"
;;
*)
echo_fun 3 参数异常第一个参数应为1,2,3,4,5
;;
esac
}
function check_ok(){
if [ $? -ne 0 ];then
echo_fun 3 执行失败,请查看日志
exit 1
fi
}
function adser(){
useradd -d /home/$1 $1
expect -c"
spawn passwd $1
expect {
\"*yes/no*\" {send \"yes\r\";exp_continue}
\"*New password:*\" {send \"$2\r\";exp_continue}
\"*Retype new password:*\" {send \"$2\r\";exp_continue}
}"
}
function check_exist_user(){
num_user=`cat /etc/passwd|grep -w $1|wc -l`
if [ ${num_user} -eq 1 ];then
echo_fun 2 该机器已经创建了$1用户,无需再创建,继续下一步
num_user=`echo 1`
else
echo_fun 4 创建$1用户
num_user=`echo 0`
fi
}
function check_catalog_exist(){
test -d $1 && echo_fun 5 $1的安装目录已经存在,请检查 && exit
}
#检查环境变量---单台
function check_etc_profile(){
echo_fun 4 配置环境变量
#检查环境变量中是否已经配置了
path_num=`cat /etc/profile |grep -w $1 |wc -l `
if [ ${path_num} -ge 1 ];then
echo_fun 5 该机器环境变量中已经配置,请检查准确性
#回滚,删除之前的软连接和安装包
rm -rf $1
rm -rf $2
exit
fi
}
#解压neo4j的二进制包,并设置软连接,和改变其属组属性。
function extract_neo4j(){
cd $SOFTWARE_PATH
echo_fun 4 解压neo4j二进制包,并创建软连接
tar -xf ${NEO4J_VERSION}-unix.tar.gz -C ${NEO4J_INSTALL_PATH}
check_ok
ln -s ${NEO4J_INSTALL_PATH}/${NEO4J_VERSION} ${NEO4J_INSTALL_PATH}/neo4j
cd ${NEO4J_INSTALL_PATH}
chown -R $1:$1 ${NEO4J_INSTALL_PATH}/neo4j*
sleep 1s
}
function alter_neo4j_config(){
echo_fun 4 修改neo4j配置文件内容
sleep 1s
cd /${NEO4J_INSTALL_PATH}/neo4j/conf/
sed -i '/#dbms.directories.data/s/^#//' neo4j.conf
sed -i '/#dbms.directories.plugins/s/^#//' neo4j.conf
sed -i '/#dbms.directories.certificates/s/^#//' neo4j.conf
sed -i '/#dbms.directories.logs/s/^#//' neo4j.conf
sed -i '/#dbms.directories.lib/s/^#//' neo4j.conf
sed -i '/#dbms.directories.run/s/^#//' neo4j.conf
sed -i '/#dbms.connectors.default_listen_address/s/^#//' neo4j.conf
sed -i '/#dbms.connector.bolt.tls_leve/s/^#//' neo4j.conf
sed -i 's/#dbms.connector.bolt.listen_address=:7687/dbms.connector.bolt.listen_address='"${host_ip[0]}"':7687/g' neo4j.conf
sed -i 's/#dbms.connector.http.listen_address=:7474/dbms.connector.http.listen_address='"${host_ip[0]}"':7474/g' neo4j.conf
sed -i 's/#dbms.connector.https.listen_address=:7473/dbms.connector.https.listen_address='"${host_ip[0]}"':7473/g' neo4j.conf
sed -i '/#dbms.security.allow_csv_import_from_file_urls=true/s/^#//' neo4j.conf
sed -i '/#dbms.shell.enabled/s/^#//' neo4j.conf
sed -i 's/#dbms.shell.host=127.0.0.1/dbms.shell.host='"${host_ip[0]}"'/g' neo4j.conf
sed -i '/#dbms.shell.port=1337/s/^#//' neo4j.conf
}
function start_neo4j(){
echo_fun 4 启动neo4j进程
su - ${NEO4J_USER} <<EOF
cd /opt/neo4j
nohup ./bin/neo4j start >/home/${NEO4J_USER}/neo4j.log 2>&1
EOF
}
function step_fun_4(){
echo_fun 4 检查neo4j安装目录是否存在
check_catalog_exist ${NEO4J_INSTALL_PATH}/${NEO4J_VERSION}
echo_fun 5 请输入neo4j的属组用户
read -p "neo4j_user=" neo4j_user
check_exist_user ${neo4j_user}
if [ $num_user -eq 0 ]; then
echo_fun 4 给neo4j用户输入密码
read -p "neo4j_password=" neo4j_passwd
adser ${neo4j_user} ${neo4j_passwd}
fi
#解压,设置软连接
extract_neo4j ${neo4j_user}
#修改配置文件
alter_neo4j_config
#检查环境变量
echo_fun 4 检查环境变量
check_etc_profile ${NEO4J_INSTALL_PATH}/neo4j ${NEO4J_INSTALL_PATH}/${NEO4J_VERSION}
#配置环境变量
if [ ${path_num} -lt 1 ];then
echo -e '\nexport NEO4J_HOME='${NEO4J_INSTALL_PATH}'/neo4j\nexport PATH=${NEO4J_HOME}/bin:$PATH'>> /etc/profile
source /etc/profile
fi
#启动neo4j
start_neo4j
neo4j_pid_num=`ps -ef |grep neo4j|grep -v grep|wc -l`
if [ ${neo4j_pid_num} -eq 1 ];then
echo_fun 2 neo4j has started....
echo_fun 2 在浏览器输入${host_ip[0]}:7474
else
echo_fun 3 启动失败,请查看错误日志信息/home/${NEO4J_USER}/neo4j.log
fi
}
step_fun_4
执行结果如下:
D. shell脚本中[ $j -ge 2 -a $j -le $(($wide-1)) ]是什么意思
$j -ge 2 变量j大于等于2
$(($wide-1)) 计算 wide-1的值
$j -le $(($wide-1)) 变量j小于等wide-1
中间的 -a 表示and
整个式子用来判断 j大于等于2并且j小于等于wide-1
E. python的strip_ge = re.compile(r"^ge(.{4,})")怎么理解
在r"^ge(.{4,})")中
r表示原生字符串,即 不用对正则表达式中的反斜杠再转义。
^ge表示以ge开头的字符串。
.{4,}表示除回车换行符外的4个及以上的任意字符。
r"^ge(.{4,})")表示捕获以ge开头的字符串中ge后面的部分。
完整的Python程序如下。
import re
strip_ge = re.compile(r"^ge(.{4,})")
m=strip_ge.search('gehelloworld')
if m==None:
print(m)
else:
print(m.group(1))
源代码(注意源代码的缩进)