#!/bin/bash
# array-ops.sh: 数组更多有趣的用法. array=( zero one two three four five )
# 元素 echo ${array[]} # zero
echo ${array:} # zero
# 第一个元素的参数扩展,
#+ 从位置0开始 (即第一个字符).
echo ${array:} # ero
# 第一个元素的参数扩展,
#+ 从位置1开始 (即第二个字符). echo "--------------" echo ${#array[]} #
# 数组第一个元素的长度.
echo ${#array} #
# 数组第一个元素的长度.
# (另一种写法) echo ${#array[]} #
# 数组第二个元素的长度.
# Bash的数组是0开始索引的. echo ${#array[*]} #
# 数组中元素的个数.
echo ${#array[@]} #
# 数组中元素的个数. echo "--------------" array2=( []="first element" []="second element" []="fourth element" ) echo ${array2[]} # 第一个元素
echo ${array2[]} # 第二个元素
echo ${array2[]} #
# 因为初始化时没有指定,因此值为空(null).
echo ${array2[]} # 第四个元素 exit #!/bin/bash
# array-strops.sh: 用于数组的字符串操作符.
# 由Michael Zick编码.
# 已征得作者的同意. # 一般来说,任何类似 ${name ... } 写法的字符串操作符
#+ 都能在一个数组的所有字符串元素中使用
#+ 像${name[@] ... } 或 ${name[*] ...} 的写法. arrayZ=( one two three four five five ) echo # 提取尾部的子串
echo ${arrayZ[@]:} # one two three four five five
# 所有的元素. echo ${arrayZ[@]:} # two three four five five
# 在第一个元素 element[]后面的所有元素. echo ${arrayZ[@]::} # two three
# 只提取在元素 element[]后面的两个元素. echo "-----------------------" # 子串删除
# 从字符串的前部删除最短的匹配,
#+ 匹配字串是一个正则表达式. echo ${arrayZ[@]#f*r} # one two three five five
# 匹配表达式作用于数组所有元素.
# 匹配了"four"并把它删除. # 字符串前部最长的匹配
echo ${arrayZ[@]##t*e} # one two four five five
# 匹配表达式作用于数组所有元素.
# 匹配"three"并把它删除. # 字符串尾部的最短匹配
echo ${arrayZ[@]%h*e} # one two t four five five
# 匹配表达式作用于数组所有元素.
# 匹配"hree"并把它删除. # 字符串尾部的最长匹配
echo ${arrayZ[@]%%t*e} # one two four five five
# 匹配表达式作用于数组所有元素.
# 匹配"three"并把它删除. echo "-----------------------" # 子串替换 # 第一个匹配的子串会被替换
echo ${arrayZ[@]/fiv/XYZ} # one two three four XYZe XYZe
# 匹配表达式作用于数组所有元素. # 所有匹配的子串会被替换
echo ${arrayZ[@]//iv/YY} # one two three four fYYe fYYe
# 匹配表达式作用于数组所有元素. # 删除所有的匹配子串
# 没有指定代替字串意味着删除
echo ${arrayZ[@]//fi/} # one two three four ve ve
# 匹配表达式作用于数组所有元素. # 替换最前部出现的字串
echo ${arrayZ[@]/#fi/XY} # one two three four XYve XYve
# 匹配表达式作用于数组所有元素. # 替换最后部出现的字串
echo ${arrayZ[@]/%ve/ZZ} # one two three four fiZZ fiZZ
# 匹配表达式作用于数组所有元素. echo ${arrayZ[@]/%o/XX} # one twXX three four five five
# 为什么? echo "-----------------------" # 在从awk(或其他的工具)取得数据之前 --
# 记得:
# $( ... ) 是命令替换.
# 函数以子进程运行.
# 函数将输出打印到标准输出.
# 用read来读取函数的标准输出.
# name[@]的写法指定了一个"for-each"的操作. newstr() {
echo -n "!!!"
} echo ${arrayZ[@]/%e/$(newstr)}
# on!!! two thre!!! four fiv!!! fiv!!!
# Q.E.D: 替换部分的动作实际上是一个'赋值'. # 使用"For-Each"型的
echo ${arrayZ[@]//*/$(newstr optional_arguments)}
# 现在Now, 如果if Bash只传递匹配$0的字符串给要调用的函数. . .
# echo exit #!/bin/bash
# days-between.sh: Number of days between two dates.
# Usage: ./days-between.sh [M]M/[D]D/YYYY [M]M/[D]D/YYYY
#
# Note: Script modified to account for changes in Bash .05b
#+ that closed the loophole permitting large negative
#+ integer return values. ARGS= # Two command line parameters expected.
E_PARAM_ERR= # Param error. REFYR= # Reference year.
CENTURY=
DIY=
ADJ_DIY= # Adjusted for leap year + fraction.
MIY=
DIM=
LEAPCYCLE= MAXRETVAL= # Largest permissable
#+ positive return value from a function. diff= # Declare global variable for date difference.
value= # Declare global variable for absolute value.
day= # Declare globals for day, month, year.
month=
year= Param_Error () # Command line parameters wrong.
{
echo "Usage: `basename $0` [M]M/[D]D/YYYY [M]M/[D]D/YYYY"
echo " (date must be after 1/3/1600)"
exit $E_PARAM_ERR
} Parse_Date () # Parse date from command line params.
{
month=${%%/**}
dm=${1%/**} # Day and month.
day=${dm#*/}
let "year = `basename $1`" # Not a filename, but works just the same.
} check_date () # Checks for invalid date(s) passed.
{
[ "$day" -gt "$DIM" ] || [ "$month" -gt "$MIY" ] || [ "$year" -lt "$REFYR" ] && Param_Error
# Exit script on bad value(s).
# Uses "or-list / and-list".
#
# Exercise: Implement more rigorous date checking.
} strip_leading_zero () # Better to strip possible leading zero(s)
{ #+ from day and/or month
return ${#} #+ since otherwise Bash will interpret them
} #+ as octal values (POSIX., sect 2.9.2.1). day_index () # Gauss' Formula:
{ # Days from Jan. , to date passed as param. day=$
month=$
year=$ let "month = $month - 2"
if [ "$month" -le ]
then
let "month += 12"
let "year -= 1"
fi let "year -= $REFYR"
let "indexyr = $year / $CENTURY" let "Days = $DIY*$year + $year/$LEAPCYCLE - $indexyr + $indexyr/$LEAPCYCLE + $ADJ_DIY*$month/$MIY + $day - $DIM"
# For an in-depth explanation of this algorithm, see
#+ http://home.t-online.de/home/berndt.schwerdtfeger/cal.htm echo $Days } calculate_difference () # Difference between to day indices.
{
let "diff = $1 - $2" # Global variable.
} abs () # Absolute value
{ # Uses global "value" variable.
if [ "$1" -lt ] # If negative
then #+ then
let "value = 0 - $1" #+ change sign,
else #+ else
let "value = $1" #+ leave it alone.
fi
} if [ $# -ne "$ARGS" ] # Require two command line params.
then
Param_Error
fi Parse_Date $
check_date $day $month $year # See if valid date. strip_leading_zero $day # Remove any leading zeroes
day=$? #+ on day and/or month.
strip_leading_zero $month
month=$? let "date1 = `day_index $day $month $year`"
echo $date1 Parse_Date $
check_date $day $month $year strip_leading_zero $day
day=$?
strip_leading_zero $month
month=$? date2=$(day_index $day $month $year) # Command substitution.
echo $date2 calculate_difference $date1 $date2 abs $diff # Make sure it's positive.
diff=$value echo $diff exit
# Compare this script with
#+ the implementation of Gauss' Formula in a C program at:
#+ http://buschencrew.hypermart.net/software/datedif #!/bin/bash
exec <007en
exec <007cn
no=
while read f1 <& && read f2 <&
do
#echo $f1\($f2\)
tmpname=${f1}"("${f2}")"
#echo $tmpname
allnames[$no]=$tmpname
let "no+=1"
done
#let "count=no-1"
no=
for i in *
do
if ! [ -d $i ]
then
continue
fi
pref=${i::}
tmpname=${allnames[$no]}
newname=$pref$tmpname
#echo $newname
if ! [ $i = $newname ];then
mv -v $i $newname
fi
let "no+=1"
done #!/bin/bash
for i in *
do
if [ ! -d $i ];then
continue
fi
cd $i
\rm -v *gif *html *htm *js
for j in *
do
if [ -d $j ]
then
\rm -rv $j
continue
fi
#找出含有jpg或jpeg的图片
a=`echo $j|grep jpg`
xa=`echo $?`
b=`echo $j|grep jpeg`
xb=`echo $?`
if [ $xa -eq ] && [ $xb -eq ]
then
\rm -v $j
continue
fi
#得到图片的尺寸
sze=`identify $j|awk '{print $3}'`
width=${sze%x*}
height=${sze#*x}
if [ $width -lt ] && [ $height -lt ]
then
\rm -v $j
fi
done
cd ..
done #!/bin/sh
# Last modified: 2003年07月05日 星期六 00时09分44秒 [test] SOURCE=$
TARGET=$ #CP=./fack_cp
CP=cp $CP "$SOURCE" "$TARGET" &
CPID=$! isalive(){
out=`ps -p $ > /dev/null`
return $?
} while [ ]; do {
SSIZE=`/bin/ls -l $SOURCE | gawk "{print \\\$5}"`
if [ -f $TARGET ]; then
TSIZE=`/bin/ls -l $TARGET | gawk "{print \\\$5}"`
else
TSIZE=""
fi
PERCENT=`echo "scale=2; $TSIZE/$SSIZE*100" | bc -l`
RATE=`echo "scale=0; 63*$PERCENT/100" | bc -l`
BLUE="\\033[3;44m"
NORMAIL="\\033[0;39m" BAR=$BLUE
i=
while [ $i -le ]; do
[ $i = $RATE ] && BAR=$BAR"\\033[7;39m"
BAR=$BAR" "
let i=$i+
done
BAR=$BAR$NORMAIL
echo -en "\r$BAR ${PERCENT}%"
if ! isalive "$CPID"; then echo -en "\n"; exit; fi
sleep
}
done #!/bin/bash
#eval命令的另一种使用方法
#做算术运算要使用表达式((count=$#))或者let "count=$#",
#如果使用count=$#赋值,shell则认为count是字符串
((count=$#))
cmd=echo
while :
do
cmd="$cmd \$$count"
((count=`expr $count-`))
if [ $count -eq ]
then
break
fi
done
eval $cmd #!/bin/bash
let allrows=/
let allcols=/
#echo "allrows="$allrows
#echo "allcols="$allcols
#echo $#
if [ $# -lt ]
then
echo "Usage xxx row col"
elif [ $# -eq ]
then
let row=$/$allrows
let col=$%$allcols
echo "row="$row
echo "col="$col
elif [ $# -ge ]
then
row=$
col=$
echo "row="$row
echo "col="$col
fi
let rowS=$row*+
let rowE=$rowS+
let colS1=$col*+
let colS2=$col*+
let colS3=$col*+
let colS4=$col*+
#echo "colS1="$colS1 "colS2="$colS2 "colS3"=$colS3 "colS4"=$colS4
#aa="${rowS},${rowE}"
#echo $aa
#sed -n "$rowS"','"$rowE"'p' mv.txt |awk '{print $colS1 $colS2 $colS3 $colS4}'
sed -n "$rowS"','"$rowE"'p' mv.txt |awk -v colS1=$colS1 -v colS2=$colS2 -v colS3=$colS3 -v colS4=$colS4 '{print $colS1 $colS2 $colS3 $colS4}' #!/bin/bash
# rnd.sh: 输出一个10进制随机数
# Script by Stephane Chazelas. head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p' # =================================================================== #
# 分析
# ----
# head:
# -c4 选项将取得前4个字节.
# od:
# -N4 选项将限制输出为4个字节.
# -tu4 选项将使用无符号10进制格式来输出.
# sed:
# -n 选项, 使用 "s" 命令与 "p" 标志组合的方式,
# 将会只输出匹配的行. # 本脚本作者解释 'sed' 命令的行为如下.
# head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'
# ----------------------------------> |
# 假设一直处理到 "sed"命令时的输出--> |
# 为 1198195154n
# sed 命令开始读取字串: 1198195154n.
# 这里它发现一个换行符,
#+ 所以 sed 准备处理第一行 ( ).
# sed命令开始匹配它的 <range> 和 <action>. 第一个匹配的并且只有这一个匹配的:
# range action
# s/.* //p
# 因为行号在range中, 所以 sed 开始执行 action:
#+ 替换掉以空格结束的最长的字符串, 在这行中这个字符串是
# ("0000000 ") ,用空字符串(//)将这个匹配到的字串替换掉, 如果成功, 那就打印出结果
# ("p" 在这里是 "s" 命令的标志, 这与单独的 "p" 命令是不同的). # sed 命令现在开始继续读取输入. (注意在继续之前,
#+ continuing, 如果没使用 -n 选项的话, sed 命令将再次
#+ 将这行打印一遍).
# 现在, sed 命令读取剩余的字符串, 并且找到文件的结尾.
# sed 命令开始处理第2行(这行也被标记为 '$'
# 因为这已经是最后一行).
# 所以这行没被匹配到 <range> 中, 这样sed命令就结束了.
# 这个 sed 命令的简短的解释是:
# "在第一行中删除第一个空格左边全部的字符,
#+ 然后打印出来."
# 一个更好的来达到这个目的的方法是:
# sed -e 's/.* //;q'
# 这里, <range> 和 <action> 分别是 (也可以写成
# sed -e 's/.* //' -e q): # range action
# nothing (matches line) s/.* //
# nothing (matches line) q (quit)
# 这里, sed 命令只会读取第一行的输入.
# 将会执行2个命令, 并且会在退出之前打印出(已经替换过的)这行(因为 "q" action),
#+ 因为没使用 "-n" 选项. # =================================================================== #
# 也可以使用如下一个更简单的语句来代替:
# head -c4 /dev/urandom| od -An -tu4 exit

Linux脚本程序的更多相关文章

  1. Linux脚本程序包及安装

    概述 脚本程序并不多见,所以在软件包分类中并没有把它列为一类.它更加类似于 Windows 下的程序安装,有一个可执行的安装程序,只要运行安装程序,然后进行简单的功能定制选择(比如指定安装目录等),就 ...

  2. linux c程序中获取shell脚本输出的实现方法

    linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...

  3. 制作Linux下程序安装包——使用脚本打包bin、run等安装包

    制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了.一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可. ...

  4. 在Linux中以普通用户开机自动运行脚本程序

    测试环境:CentOS6.5 管理员:root 普通用户:test1 实现目标:在Linux启动时,以普通用户test1自动运行位于根目录下的脚本程序test.py,该程序会在每次执行时自动向本地日志 ...

  5. [转载] 在Linux中,开机自动运行普通用户的脚本程序

    FROM:http://blog.csdn.net/sinboy/article/details/2466225 FROM:http://www.2cto.com/os/201006/50680.ht ...

  6. 如何在linux下编写一个简单的Shell脚本程序

    在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...

  7. Runtime.getRuntime.exec()执行linux脚本导致程序卡死有关问题

    Runtime.getRuntime.exec()执行linux脚本导致程序卡死问题问题: 在Java程序中,通过Runtime.getRuntime().exec()执行一个Linux脚本导致程序被 ...

  8. Linux CAN Shell 测试脚本程序

    2012-01-13 22:57:14 为我的开发板2440做二次开发,添加了can驱动,做了驱动测试程序,没理由不添加一个测试脚本程序啊!修改了测试程序,使应用程序更加灵活,添加了一下传递参数.接着 ...

  9. linux脚本编程(shell)浅介 (转载)

    linux脚本(shell)编程 啊,昨天上网看到一篇讲 linux/unix shell 的文章,想想自己最后写这东西也是一年前的事了,想想都快忘光了. 还是整理一下,做一次回顾,以后说不定还用得上 ...

随机推荐

  1. centos的基本操作

    1.ssh连接阿里云一段时间不操作自动断开打开/etc/ssh/sshd_config添加或修改: ClientAliveInterval 120ClientAliveCountMax 0 2.挂载数 ...

  2. ionic2集成sdk后,连接超时的问题

    这几天在测试app的时候,偶尔会发现集成的好视通sdk在进入会议室的时候出现连接超时的问题,一直卡在‘正在获取版本信息’的页面,经反复测试后这种现象主要出现在点击返回按钮和退出登录按钮的时候会出现,也 ...

  3. Python_面向对象_类1

    面向对象:减少重复代码,提高效率,比函数式编程更高效 类的创建: 实例属性又称:成员变量,成员属性(或者字段) 面向对象的三大特性: 一.封装 把客观事物封装为抽象的类,并对外只暴露一个可用接口 使用 ...

  4. Codeforces 1071C Triple Flips 构造

    原文链接 https://www.cnblogs.com/zhouzhendong/p/CF1071C.html 题目传送门 - CF1071C 题意 给定一个长度为 n 的 01 数列,限定你在 $ ...

  5. CodeSignal 刷题 —— almostIncreasingSequence

    Given a sequence of integers as an array, determine whether it is possible to obtain a strictly incr ...

  6. maya shell 和 UV shell 的区别

    maya shell 和 UV shell 的区别 shell 是 maya 模型自身分离的部分 UV shell 是 UV 分离的部分 有多少个shell,就至少有多少个 UV shell,但是一个 ...

  7. Kmeans:利用Kmeans实现对多个点进行自动分类—Jason niu

    import numpy as np def kmeans(X, k, maxIt): numPoints, numDim = X.shape dataSet = np.zeros((numPoint ...

  8. POJ 1330 Nearest Common Ancestors (模板题)【LCA】

    <题目链接> 题目大意: 给出一棵树,问任意两个点的最近公共祖先的编号. 解题分析:LCA模板题,下面用的是树上倍增求解. #include <iostream> #inclu ...

  9. D - GCD HDU - 1695 -模板-莫比乌斯容斥

    D - GCD HDU - 1695 思路: 都 除以 k 后转化为  1-b/k    1-d/k中找互质的对数,但是需要去重一下  (x,y)  (y,x) 这种情况. 这种情况出现 x  ,y ...

  10. 按字典序依次打印只由1~n组成的n位数

    //我的dfs入门.将1~n一次填入数组然后打印. #include<stdio.h> #include<string.h> ]; ]; void dfs(int,int); ...