没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|行业资讯|编辑:龚雪|2015-10-16 11:47:18.000|阅读 253 次
概述:shell脚本可以直接与操作系统内核打交道,从而完成任意复杂的任务,让我们一起来看看shell是如何完成某些特殊复杂的功能的。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
同C、C++等语言一样,shell脚本也提供了数组这样一个重要的数据结构,shell中的数组有两种,一种为普通数组,另外的一种称为关联数组。普通数据的存取通过整数进行,关联数组的存取通过字符串进行。具体如下:
//用()定义一个数组,注意数组元素间不能用,否则达不到预期目的 root@sparkmaster:~/ShellLearning/chapter11# arr=(1 2 3 4 5 6) root@sparkmaster:~/ShellLearning/chapter11# echo ${arr[0]} 1 //用,号的话,数组只有一个元素 root@sparkmaster:~/ShellLearning/chapter11# arr=(1,2,3,4,5,6) root@sparkmaster:~/ShellLearning/chapter11# echo ${arr[0]} 1,2,3,4,5,6
除了()定义数组外,还可以采用逐个赋值的方法,例如
root@sparkmaster:~/ShellLearning/chapter11# strArr[0]="hello" root@sparkmaster:~/ShellLearning/chapter11# strArr[1]="hello1" root@sparkmaster:~/ShellLearning/chapter11# echo ${strArr[0]} hello
上面演示了如何输出单个数组内容,有时可能想输出数组中的所有内容及数组的长度,代码如下:
//用*号将输出数组中的所有内容 root@sparkmaster:~/ShellLearning/chapter11# echo ${strArr[*]} hello hello1 //${#strArr[*]}取得数组的长度 root@sparkmaster:~/ShellLearning/chapter11# echo ${#strArr[*]} 2
关联数组的定义与普通数组不一样,关联数组需要使用declare命令进行声明,具体如下:
//declare -A associative_array声明一个关联数组 root@sparkmaster:~/ShellLearning/chapter11# declare -A associative_array //填充内容 root@sparkmaster:~/ShellLearning/chapter11# associative_array=([key1]=value1 [key2]=value2 [key3]=value3) //获取关联数组内容 root@sparkmaster:~/ShellLearning/chapter11# echo ${associative_array[key1]} value1
在实际使用时,常常需要确定数组的索引值,具体使用代码如下:
//获取关联数组的索引 root@sparkmaster:~/ShellLearning/chapter11# echo ${!associative_array[*]} key3 key2 key1 //获取普通数组的索引 root@sparkmaster:~/ShellLearning/chapter11# echo ${!strArr[*]} 0 1
在使用shell命令时,有时候命令太长,要记住它非常困难,此时可以采用shell命令别名的方式。事实上,linux系统自身已经自带了很多命令别名,例如~/.bashrc已经帮我们设置了多个命令别名,vim打开该文件,可以看到下面的代码
# enable color support of ls and also add handy aliases if [ -x /usr/bin/dircolors ]; then test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" alias ls='ls --color=auto' #alias dir='dir --color=auto' #alias vdir='vdir --color=auto' alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' alias egrep='egrep --color=auto' fi # some more ls aliases alias ll='ls -alF' alias la='ls -A' alias l='ls -CF'
代码中的命令alias表示的是给命令取别名,例如alias ll=’ls -alF’,表示ll是命令’ls -alF’的别名
//ll命令等同于ls -alF命令 root@sparkmaster:~/ShellLearning/chapter11# ll total 8 drwxr-xr-x 2 root root 4096 2015-10-04 23:21 ./ drwxr-xr-x 5 root root 4096 2015-10-04 23:21 ../ root@sparkmaster:~/ShellLearning/chapter11# ls -alF total 8 drwxr-xr-x 2 root root 4096 2015-10-04 23:21 ./ drwxr-xr-x 5 root root 4096 2015-10-04 23:21 ../
ubuntu linux 安装某个软件包的命令是sudo apt-get install,如果觉得它比较难记,可以直接使用alias给它命名一个好记的别名,例如
//给sudo apt-get install取个别名install root@sparkmaster:~/ShellLearning/chapter11# alias install='sudo apt-get install' //直接使用install命令代替sudo apt-get install命令 root@sparkmaster:~/ShellLearning/chapter11# install opencv //但是需要注意的是在终端取别名,一旦终端关闭,别名命令不会保存 //如果想永久使用即开机后该别名命令就生效的话,则需要将别名命令重定向 //保存到~/.bashrc文件中 root@sparkmaster:~/ShellLearning/chapter11# echo 'alias install="sudo apt-get install"' >> ~/.bashrc
shell命令有许多时间操作命令,具体使用如下
//查看当前时间 root@sparkmaster:~/ShellLearning/chapter11# date Mon Oct 5 00:06:11 PDT 2015 //查看当前是星期几 root@sparkmaster:~/ShellLearning/chapter11# date +%A Monday //查看当前月份 root@sparkmaster:~/ShellLearning/chapter11# date +%B October //查看当前是当月的第几天 root@sparkmaster:~/ShellLearning/chapter11# date +%d 05
date命令参数列表如下:
参数
|
参数作用
|
%a 简写法,例如Monday,简写为Mon;%A,全拼法Monday
|
Weekday |
%b 简写法,例如October,简写为Otc;%B,全拼法October
|
Month |
%d
|
Day |
%D
|
格式化日期 |
%y,简写法,例如2010,简写为10;%Y,全写法2010
|
Year |
%I 或%H
|
Hour |
%M
|
Minute |
%S
|
Second |
%N
|
Nano second |
%s
|
Unix系统时间 |
//按年月日将时间格式化输出 root@sparkmaster:~/ShellLearning/chapter11# date "+%Y %B %d" 2015 October 05
shell命令中还有一个命令很重要,那就是sleep命令,常用它来进行延迟脚本的执行,下面的例子来自linux shell scripting cookbook
#!/bin/bash #Filename: sleep.sh echo -n count: #保存终端光标位置 tput sc count=0; while true; do #count小于40,则继续执行 if [ $count -lt 40 ]; then let count++; #延迟一秒再执行 sleep 1; #恢复光标位置 tput rc #清除光标位置内容 tput ed #将count值显示到光标位置 echo -n $count; else exit 0; fi done
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@wqylolg.cn
HOOPS Exchange作为一款功能强大的3D CAD数据转换工具,凭借其广泛的格式支持、高精度的数据解析能力和灵活的集成方式,在可视化、造型、存档和PDF发布等多个领域展现出卓越的应用价值。
3D ACIS Modeler以其开放的面向对象架构、丰富的几何与拓扑操作、高性能多平台支持,以及可扩展的插件体系,成为各类专业三维应用的首选建模内核。
CGM Modeler凭借其精确的B-Rep内核、多源格式兼容、自动化特征识别及增材制造算子,已成为CAD/CAE/CAM及数字化制造应用构建的首选几何建模内核。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@wqylolg.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢