首页 » web服务器

linux shell 学习笔记

   发表于:web服务器评论 (0)   热度:1406

1、shell 子进程 : 在当前shell下打开一个新的shell , 那这个新的shell就是子进程 。

父进程里的自定义变量不能直接在 子进程里使用 , 通过 export 将变量 变成 环境变量后 就可以在  子进程 里使用了 。



进入 子进程 :   bash
退出 子进程 :  exit
取消设置的变量:unset    , 例如: unset name ,取消刚才设置的 name 这个变量 。

反引号(`) 的作用 : 在 一串命令中 在 ` 之内的命令 将 先被执行  , 执行的结果作为 外部输入的命令
例如:  进入目前内核的模块:   # cd /lib/modules/`uname -r`/kernel



命令行 :declare -i number=$RANDOM*10/32768 ; echo $number
declare 声明数值类型 , 这里不大明白
$RANDOM 随机数 , echo $RANDOM 输出一个随机数


?   (问号) 显示上一个执行命令的回传码 即 , 一个命令执行成功 会 回传一个  0  , 执行失败 就会传回一个非 0 的值  (命令执行失败就 传回来一个错误代码)。

例如:  #ls
    #echo $? 这里输出 0
    表示 他的上一条命令 ls  执行正确 。





2、locale 显示系统所致支持的 国际语言
    #locale -a 显示系统所支持的所有的 国际语言 。
          查看系统当前的语言编码格式
    #cat   /etc/sysconfig/i18n  
    LANG="zh_CN.UTF-8"



3、read : 读取来自键盘输入的变量
    格式: read [-pt] variable
            -p 输入提示信息 ,例如 请输入你的名字 :
            -t 输入等待的时间 , 等待时间过了后 就会略过这个命令 (不让你输入接着执行下面的命令)
    例如:
    [seaman@seaman911 桌面]$ read -p 'please keyin your name:' -t 20 name
    please keyin your name:ddddddddd
    [seaman@seaman911 桌面]$ echo $name
    ddddddddd
    [seaman@seaman911 桌面]$

    在以上命令中 输入的  “ddddddddd” 会 被read读取并且赋给  name 这个变量  , name这个自定义变量

    

4、declare/typeset 声明变量的类型:  

    declare [-aixr] variable
        参数:
        -a 将后边命名为 variable 的变量 定义为数组 (array)类型
        -i 将后边命名为 variable 的变量 定义为整数数字 (integer)类型
        -x 与export 一样  , 将后边的 variable 变成环境变量
        -r 将变量设置成为 readonly 类型 , 改变里不可更改内容 , 也不可重设
        -p 可以单独列出变量的类型(查看变量的类型)
    

    在用次命令时候 , “ -x ”、“ -a ”等参数前面带减号(-) 是设置操作 ,
               “ +x ”、“ +a ” 是执行取消操作 。 如例 2 所示。

    例 1:
    [seaman@seaman911 桌面]$ sum=33+44+55
    [seaman@seaman911 桌面]$ echo $sum
    33+44+55
    [seaman@seaman911 桌面]$ declare -i sum=33+44+55
    [seaman@seaman911 桌面]$ echo $sum
    132
    [seaman@seaman911 桌面]$

    在以上例子中 变量 sum 默认是 “字符串” 型的  , 所以 33+44+55 为一个字符串 不是计算式 。
    declare -i sum   把sum定义成一个整数型的变量 ,  33+44+55 就是个计算式 了  。
    另外  在 bash 环境中的数值运算最多能到达 整数型 所以 1/3 的结果是 0 。
    

    例 2:
    把sum设置成环境变量
    [seaman@seaman911 桌面]$ declare -x num
    
    取消sum的环境变量的设置
    [seaman@seaman911 桌面]$ declare +x num
    
    
    例 3 、
    定义数组变量, 读取数组。   读取数组的时候用  ${数组} 的形式读取 。
    [seaman@seaman911 桌面]$ declare -a coupon
    [seaman@seaman911 桌面]$ coupon[1]=50
    [seaman@seaman911 桌面]$ echo "coupon 1 = ${coupon[1]}"
    coupon 1 = 50
    [seaman@seaman911 桌面]$ echo ${coupon[1]}   读取输出数组

 

 

变量的替换删除这里不太明白, 从网上 找了个文章 待   实践

 

假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt

可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 /  及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 .  及其左边的字符串:file.txt
${file##*.}:删掉最后一个 .  及其左边的字符串:txt
${file%/*}:删掉最后一个  /  及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 /  及其右边的字符串:(空值)
${file%.*}:删掉最后一个  .  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个  .   及其右边的字符串:/dir1/dir2/dir3/my

记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2

也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt

利用 ${ } 还可针对不同的变数状态赋值(沒设定、空值、非空值): 
${file-my.file.txt} :假如 $file 沒有设定,則使用 my.file.txt 作传回值。(空值及非空值時不作处理) 
${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作处理)
${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作处理)
${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作处理)
${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。(空值及非空值時不作处理)
${file:=my.file.txt} :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為my.file.txt 。 (非空值時不作处理)
${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作处理)
 

${file:?my.file.txt} :若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (非空值時不作处理)

${#var} 可计算出变量值的长度:
 

${#file} 可得到 27 ,因为/dir1/dir2/dir3/my.file.txt 是27个字节

(。・v・。)
喜欢这篇文章吗?欢迎分享到你的微博、QQ群,并关注我们的微博,谢谢支持。