本文共 5602 字,大约阅读时间需要 18 分钟。
-- Start
#!/bin/ksh# 定义常量方法 1typeset -r CONSTANT_INT=110;# 定义常量方法 2readonly CONSTANT_STR="TEST";
#!/bin/ksh# 定义整数变量integer var_int1=10; # 方法 1(推荐)typeset -i var_int2=-10; # 方法 2let "var_int3=20"; # 方法 3((var_int4=30)); # 方法4integer var_int5=010; # 八进制以 0 开头integer var_int6=0x10; # 十六进制以 0x 开头#--- 2# 表示后面的数字是二进制#--- B#N B表示进制,最大 64integer var_int5=2#10;# 定义浮点数变量float var_float1=250.0; # 方法 1(推荐)typeset -F var_float2=250.; # 方法 2typeset -F var_float3=0.25;typeset -F var_float4=.25;typeset -F var_float5=-250.0e2; # -250.0乘以 10 的 2 次方,e不区分大小写# typeset -E 用来定义双精度浮点数变量typeset -E var_double1=250.0;typeset -E var_double2=250.;typeset -E var_double3=0.25;typeset -E var_double4=.25;typeset -E var_double5=-250.0e2; # -250.0乘以 10 的 2 次方,e不区分大小写
#!/bin/ksh ################################ 定义字符串# 方式1:双引号 # 双引号内的字符串可以进行变量插值和字符转义 typeset str="Zhang San"; typeset string="Li Si"; typeset text1="my name is $str\n"; #此处的 $str 将被字符串张三替换,这种能力称之为变量插值,\n 为转义字符 typeset text2="my name is $string\n"; # 此处的变量到底是 $str 还是 $string 呢?默认是最长匹配,也就是$string typeset text3="my name is ${str}ing\n"; # 如果想插入变量 $str的值,可以将变量名用大括号围起来 # 方式2:单引号 # 单引号内的任何字符都代表它自己,无法进行变量插值和字符转义 typeset text4='my name is $str\n'; #此处的 $str 无法被替换为张三,\n 也无法代表换行符################################ 字符串操作######################### 长度 # ${#xx} 得到变量 xx 的长度 print "the length of $str is ${#str}";######################### 子串# ${xx:start} 从 start 开始得到变量 xx 的子串print "Get substring from 11: ${text1:11}";# ${xx:start:length} 从 start 开始,取 length 个字符,得到变量 xx 的子串print "Get substring from 11 and get 5 characters: ${text1:11:5}";# ${xx:start} 和 ${xx:start:length}, 注意 start 可以是负值哦,表示相对于字符串的末尾print "Get substring from -9: ${text1:-9}";######################### 替换# ${xx/pattern/replace} pattern 是个正则表达式,将变量 xx 中 pattern 匹配的字串替换成 replace 指定的字符串,非贪婪模式 print "text1 after replaced Zhang to Wang: ${text1/Zhang/Wang}";# ${xx//pattern/replace} 同上,贪婪模式 print "text1 after replaced Zhang to Wang: ${text1//Zhang/Wang}";# ksh 不支持 行首,行尾,单词边界 正则表达式,下面的方式实现了类似功能# ${xx/#pattern/replace} pattern 是个正则表达式,从变量 xx 开头查找 pattern 匹配的字串替,如果找到则换成 replace 指定的字符串,非贪婪模式print "str after replaced Zhang to Wang: ${str/#Zhang/Wang}";# ${xx/%pattern/replace} pattern 是个正则表达式,查找变量 xx 是否以 pattern 匹配的字串替结尾,如果找到则换成 replace 指定的字符串,非贪婪模式print "str after replaced San to Four: ${str/%San/Four}";######################### 删除子串# ${xx/pattern} pattern 是个正则表达式,删除变量 xx 中 pattern 匹配的子串,非贪婪模式 print "text1 after removed Zhang: ${text1/Zhang}";# ksh 不支持 行首,行尾,单词边界 正则表达式,下面的方式实现了类似功能# ${xx#pattern} pattern 是个正则表达式,从变量 xx 开头查找 pattern 匹配的字串替,如果找到则删除,非贪婪模式print "str after removed Zhang: ${str#Zhang}";# ${xx##pattern} 同上,贪婪模式print "str after removed Zhang: ${str##Zhang}";# ${xx%pattern} pattern 是个正则表达式,查找变量 xx 是否以 pattern 匹配的字串替结尾,如果找到则删除,非贪婪模式print "str after removed San: ${str%San}";# ${xx%%pattern} 同上,贪婪模式print "str after removed San: ${str%San}";######################### 判断是否为空# 接收参数 name=$1; age=$2; gendar=$3; description=$4; # ${xx:-"test"} 表示如果变量 xx 存在且不为 null,返回其值,否则返回 testname=${name:-"Shang Bo"}; print "name=$name"; # ${xx:='test'} 表示如果变量 xx 存在且不为 null,返回其值,否则设置 xx 为 test 并返回 test age=${age:='30'}; print "age=$age"; # ${xx:+'test'} 表示如果变量 xx 存在且不为 null,返回 test, 否则返回 null description="a java developer"; print "${description:+'description already defined'}"; # ${xx:?"error"} 表示如果变量 xx 存在且不为 null,返回其值,否则显示 error 错误消息 并终止程序 gendar=${gendar:?"gendar missing."}; # -n 判断字符串不为空,长度不为0 if [ -n "$name" ]; then print "#** $name is not empty **#" fi # -z 判断字符串为空.长度为0. if [ -z "$x" ];then print "#** $x is empty **#" fi ######################### 其他# ${!xx*} 或 ${!xx@} 得到 以 xx 开头的所有变量print "We have variables ${!text*} who start with text";
我们还可以通过 typeset 命令来操作字符串。
#!/bin/kshalpha=" aBcDeFgHiJkLmNoPqRsTuVwXyZ ";# 去掉前面空格typeset -L v=$alpha;print "Remove leading spaces: $v";# 去掉尾部空格typeset -R v=$alpha;print "Remove trailing spaces: $v";# 去掉前面空格后,保留 10 位字符,如果长度不够 10 位则在尾部补空格typeset -L10 v=$alpha;print "truncate to 10 after remove leading spaces: $v";# 去掉尾部空格,保留 16 位字符,如果长度不够 16 位则在前面补空格typeset -R16 v=$alpha;print "truncate to 16 after remove trailing spaces: $v";# 在前面补 0 使整个数字成 8 位typeset -Z8 v="123.50"print "add leading 0: $v";# 去掉前面的 0 使整个数字成 6 位typeset -LZ6 v="00123.50"print "strips leading 0: $v";# 全部转成小写typeset -l v=$alpha;print "to lowercase: $v";# 全部转成大写typeset -u v=$alpha;print "to uppercase: $v";
ksh 支持如下转义字符。
\a 响铃\b 退格\c 终止处理字符串\E Esc键\f 换页\n 换行\r 回车\t 水平制表符\v 垂直制表符\0n 表示n为8进制数字\\ 反斜线
#!/bin/ksh# 定义函数function fun_test { # 定义局部变量 typeset local_vardefined_in_function="local variable defined in function"; # 在函数中定义全局变量 global_var_defined_in_function="global variable defined in function"; # 改变全局变量的值 global_var_defined_in_main+=" changed in function";}# 定义全局变量typeset global_var_defined_in_main="global variable defined in main";print "global_var_defined_in_main=$global_var_defined_in_main";# 调用函数print "Call function";fun_test;# 打印值是否改变print "global_var_defined_in_main=$global_var_defined_in_main";print "global_var_defined_in_function=$global_var_defined_in_function";print "local_vardefined_in_function=$local_vardefined_in_function";结果如下
global_var_defined_in_main=global variable defined in mainCall functionglobal_var_defined_in_main=global variable defined in main changed in functionglobal_var_defined_in_function=global variable defined in functionlocal_vardefined_in_function=
#!/bin/ksh# 导出变量方法 1typeset -x CONSTANT_INT=110;# 导出变量方法 2export CONSTANT_STR="TEST";
-- 更多参见:
-- 声 明:转载请注明出处
-- Last Updated on 2015-10-05
-- Written by ShangBo on 2015-09-22 -- End