LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3415|回复: 6

bash shell 类型转换

[复制链接]
发表于 2009-4-28 15:24:32 | 显示全部楼层 |阅读模式
请问bash shell 有类型转换命令吗?
编写程序的时候,难免要把“字符数字”转换成“整型数字”
有种方法
不过好像用到一些地方不太好
如:a=123ab
${a/ab/123}
echo $a
   123123
不过如果有变量的话就好像不行了
如:nowtime=date +%H 《-----假如是字符型数值
      nowtime=$(nowtime/nowtime)  <----不知道是不是用错了还请高手指点

结果不是想要的结果,我想要的是数值型,但还是字符型没有变,

请大家帮帮我。
发表于 2009-4-28 17:27:09 | 显示全部楼层
没看懂大能的意思。nowtime/nowtime是要做一个除法么?


now=`date "+%H"`
# echo $now
17

declare -i this
# this=$now/$now
# echo $this
1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-28 17:52:06 | 显示全部楼层
Post by yzhkpli;1980680
没看懂大能的意思。nowtime/nowtime是要做一个除法么?


now=`date "+%H"`
# echo $now
17

declare -i this
# this=$now/$now
# echo $this
1
不是做除法。是替换。
谢谢了
比如:a=123
echo ${a/123/abc}
结果:abc
回复 支持 反对

使用道具 举报

发表于 2009-4-28 18:09:33 | 显示全部楼层
太大能了。貌似{str1/str2/str3}是比较str1和str2,如果str2在str1中,就将在str1中的第一次出现的str2去掉。然后加到str3的后面。

a=123q123w123e

b=123

echo ${a/$b/xyz}结果:
xyzq123w123e
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-28 18:16:19 | 显示全部楼层
1、设置bash静默超时时间
    设置环境变量TMOUT=300,则5分钟没有接受输入即自动退出(auto-logout)当前shell

2、波浪号“~”扩展
    “~”符号后跟用户名,表示引用指定用户名的宿主目录名;若不指定用户名,默认引用当前用户主目录(即$HOME)
    “~”符号后跟“-”号,表示引用前一个目录名(即$OLDPWD)
    “~”符号后跟“+”号,表示引用当前目录名(即$PWD)
    示例:
    [root@localhost ~]# echo ~jerry
        /home/jerry
        [root@localhost ~]# echo ~
        /root
        [root@localhost ~]# cd /boot/grub
        [root@localhost grub]# echo ~+
        /boot/grub
        [root@localhost grub]# echo ~-
        /root

3、关闭bash的通配符扩展(*?[]等)
    使用set -f命令设置,可以禁用通配符扩展,*?[]等作为普通字符处理。(使用set +f可以重新启用通配符扩展)
    示例:
        [root@localhost dir]# ls *
        file1.txt
        [root@localhost dir]# set -f
        [root@localhost dir]# ls *
        ls: *: No such file or directory
        [root@localhost dir]# touch *abc.txt
        [root@localhost dir]# set +f
        [root@localhost dir]# ls *
        *abc.txt  file1.txt

4、命令替换
    使用$(CMD_LINE)或`CMD_LINE`进行命令替换。需要进行嵌套使用时,前者比较方便。
    示例:
        [root@localhost ~]# ll `which cal`        //查找cal命令的位置并显示文件属性
        [root@localhost ~]# A=$(ll $(which cal))        //将上条命令结果赋值给变量A
        [root@localhost ~]# echo $A
        -rwxr-xr-x 1 root root 1302 Jan 12 2007 /usr/bin/cal

5、grep几小点用法
    示例:
        [root@localhost ~]# grep '\<con.*th\>' /usr/share/dict/words        //检索包含以con开头、th结尾的单词的行
        [root@localhost ~]# grep -v ^# /boot/grub/grub.conf | grep -v ^$        //检索非#号开头的行,摒弃空行
        [root@localhost dir]# grep -w bin /etc/passwd        //检索包含独立的'bin'单词的行(不包括类似sbin、bind的词)

6、sed几小点用法
    示例:
        [root@localhost ~]# sed -e 's/^/#/' /etc/hosts      //在每行行首插入#号,输出到屏幕
        [root@localhost ~]# sed -e 's/$/EOF/' /etc/hosts      //在每行行尾插入EOF字符串,输出到屏幕
        [root@localhost ~]# sed -i 's/Vlan/VLAN/g' /etc/somefile      //直接将文件中的Vlan改为VLAN,-i选项表示直接修改文件

7、使用read限时读入字符变量,无需回车确认
    示例:
        [root@localhost ~]# read -p "ress any key or wait 10 seconds to continue..." -st 10 -n 1 CHAR
                //按任意键或等待10秒后继续,-p显示提示信息,-s不回显输入字符,-t指定超时时间,-n指定读入的字符数

8、字符串变量的几个小用法
    示例1:
        [root@localhost ~]# echo ${NAME:="jerry"}        //若变量NAME存在则显示内容,否则新建该变量并赋初值为"jerry"
    示例2:
        [root@localhost ~]# STRING="GoodMorningEverybody"
        [root@localhost ~]# echo ${#STRING}        //查看字符串变量STRING的长度
        20
        [root@localhost ~]# echo ${STRING:4}        //删除字符串变量STRING的前4个字符,保留其余部分字符
        MorningEverybody
        [root@localhost ~]# echo ${STRING:4:7}        //删除字符串变量的前4个字符,保留之后的7个字符长度的内容
        Morning
        [root@localhost ~]# echo ${STRING/Mor/Eve}        //将字符串变量STRING中的第一个"Mor"替换为"Eve"
        GoodEveningEverybody
        [root@localhost ~]# echo ${STRING//o/XX}        //将字符串变量STRING中所有的"o"替换为"XX"
        GXXXXdMXXrningEverybXXdy
    示例3:
        [root@localhost ~]# echo $STRING
        GoodMorningEverybody
        [root@localhost ~]# expr substr $STRING 5 7        //从字符串变量STRING中的第5个字符开始截取7个字符长度的内容
        Morning
        [root@localhost ~]# echo $STRING | cut -b 5-11        //截取第5-11个字符,截取不同范围可使用"5"、"5-"、"-11"等形式
        Morning

9、数组变量的赋值与引用
    示例1:
        [root@localhost ~]# declare -a SEASON        //多数时候不需要此项声明,直接赋值为数组即可

        [root@localhost ~]# SEASON=("Spring" "Summer" "Autumn" "Winter")        //给整个数组赋值
        [root@localhost ~]# set | grep SEASON        //查看已设置的数组信息(下标从0开始)
        SEASON=([0]="New_Spring" [1]="Summer" [2]="Autumn" [3]="Winter")
        [root@localhost ~]# echo ${SEASON
  • }        //显示整个数组的内容
            Spring Summer Autumn Winter
            [root@localhost ~]# echo ${SEASON[3]}        //显示指定的单个数组元素
            Winter
            [root@localhost ~]# SEASON[0]="New_Spring"        //给单个数组元素赋值
            [root@localhost ~]# echo ${SEASON
  • }        //显示整个数组
            New_Spring Summer Autumn Winter
            [root@localhost ~]# unset SEASON[2]        //清除指定的单个数组元素
            [root@localhost ~]# unset SEASON        //清除整个数组

        示例2:
            [root@localhost ~]# cat /etc/shells | tr "\n" " " > /tmp/tmp.file        //将文件中的回车转换成空格
            [root@localhost ~]# read -a SHELLS < /tmp/tmp.file        //以文件中内容给数组赋值(碰到第一个回车符之前的内容)
            [root@localhost ~]# set | grep "SHELLS"        //查看数组赋值情况
            SHELLS=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/ksh")
  • 回复 支持 反对

    使用道具 举报

    发表于 2009-4-29 05:34:19 | 显示全部楼层
    不太會中文的名詞, 看不懂問題
    請問什么是 “字符数字” 和 “整型数字”

    另外$() 跟 ${} 有更大分別
    nowtime=$(nowtime/nowtime) 是cmd substitution
    ${a/ab/123} 是 substring,
    回复 支持 反对

    使用道具 举报

    发表于 2009-4-29 13:52:58 | 显示全部楼层
    a=123

    在"$abc"中就是123bc,这是字符串

    如果写成(($a+1)),就是数值了

    shell是一种弱类型,会自动处理类型,虽然有时候我还是觉得不大习惯。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表