shell快速入门

shell变量

命名规范: 字母数字下划线组成,字母打头

在shell这中大概分为三种变量即系统变量、环境变量、用户自动定义变量

系统变量常见的:

    $0 当前脚本的名称
    $n 当前脚本的第n个参数
    $* 当前脚本的所有的参数
    $# 当前脚本的参数的个数
    $? 指令执行完成的状态,0表示执行成功
    $$ 程序本身的PID

环境变量常见的:

    $PATH
    $HOME  打印当前用户的家目录
    $SHELL 显示当前的shell类型
    $USER  打印当前用户
    id     打印当前用户id信息
    pwd    显示当前的路径
    $TERM  显示当前的终端类型
    $HOMENAME 打印当前主机名
    $RANDOM 随机生成一个0-32767之间的整数

用户自定义变量:

普通变量 name="test"  等号两边不能有空格
局部变量 local name="test"  只能在函数体内部使用,外部无法访问
只读变量 readonly name="test" 只读变量,定义后只能读取不能修改,且unset无法销毁

使用变量:

$变量名 或者 ${变量名}
$和${}的区别:可以指定变量的边界、对字符串变量的截取

var=http://www.baidu.com/index.html
1、#号截取,从左边开始,删除匹配的字符以及左边的,保留右边的
    ${var#*//}   www.baidu.com/index.html
2、##号截取,从右边开始,删除匹配的字符以及左边的,保留右边的
    ${var##*/} index.html
3、%号截取,从左边开始,删除匹配的字符以右边的,保留左边的
    $var{var%/*} http://www.baidu.com
4、%%号截取,从右边开始,删除匹配的字符以及右边的,保留左边的
    ${var%%/*} http:
5、从左边第几个字符开始,以及截取字符长度
    ${var:0:3} htt
    ${var:0}   缺省长度表示inde以后的所有字符长度
6、从右边第几个字符开始,以及截取字符的长度
    ${var:0-3:3} tml
    ${var:0-3} 缺省长度表示inde以后的所有字符长度

流程控制

1、if判断
   if单分支
       if [ 条件表达式 ];then  语句  fi
   if双分支
       if [ 条件表达式1 ];then 语句1 else 语句2 fi
   if多分枝
       if [ 条件表达式1 ];then 语句1 elif [ 条件表达式2 ];then 语句2  else  语句3 fi

2、for循环
       for 变量名 in 取值列表;do 语句  done

        chmod 755 ${ele}
        echo $ele
done

       案例:查找环境中的所有权限为777的权限修改为755
        #!/bin/bash
        name=`find /root ! -type l -perm 777 2>/dev/null`
        array=(${name// / })
        for ele in ${array[*]}
        do
            chmod 755 ${ele}
            echo $ele
        done


3、while循环
       while (表达式)  do 语句 done

4、case选择
       case 模式名 in
            模式名1)
                语句1
                ;;
            模式名2)
                语句1
                ;;
            *)
                不符合上述模式执行语句
        esac     
       案例:查找环境中的所有权限为777的权限修改为755
        

3、while循环
       while (表达式)  do 语句 done

4、case选择
       case 模式名 in
            模式名1)
                语句1
                ;;
            模式名2)
                语句1
                ;;
            *)
                不符合上述模式执行语句
        esac     

条件判断

条件判断命令

[]与test用作判断,[]是test命令的另一种形式,用于判断表达式返回值是否是0或者非0

test $a == "linux" 等价于 [ $a == "linux" ]

备注:[] 与[[]] 的区别,[[]]是增强版本的[],也是用作判断的增强点:

1、在[[]]中使用<>符号不需要转义,在[]中使用需要转移     
    [ $1 \> 5 ] 等价于[[ $1>5 ]]
2、在[[]]中可以使用&& 或者 ||连接且只能连接 != 或者 ==的判断
    [[ $1 !=2 && 2==3 ]]
   或者分来写来规避
    [[ $1 > 1 ]] && [[ 2 < 3]]

条件判断文件判断、字符串比较、数值比较

文件判断
    -e 路径存在时返回真               test -e /paasdata
    -f 路径存在且是文件时返回真        [ -f /paadata/test.sh ]
    -d 路径存在且是目录时为真          [[ -d /paasdata]]

字符串比较
    -z 当str为空时返回真
    -n 当str为非空时返回真
    =  当两个str相等时返回真
    == 当两个str相等时返回真
    != 当两个str不相等时返回真

数值比较
    -eq 相等 
    -ne 不等
    -lt 小于
    -le 小于等于
    -gt 大于
    -ge 大于等于

逻辑运算
    -a 逻辑于  tes 1>1 -a 2=2
    -o 逻辑或
    ! 逻辑非

数值运算

整数运算

$[]与$(())表达式用作数值运算,运算符两侧可以无空格、引用变量可以省去$符号、无需转义

echo $[a+25]

使用let命令,let命令可以直接对变量值做运算再保存新的值

let x+=1;
echo $x

expr命令,乘法操作应采用 * 转义、运算操作符之间需要以空格分开、引用变量时必须加$符号

expr $x - 56

数组

shell的 数组只支持一维数组,初始化时不需要定义数组的大小,数组的下标从0开始

数组的定义,用括号表示,元素用空格分隔开:(A B C)

arry = (a b c)
arry[3]=4

读取数组

#单个值读取
${arry[0]}

#获取数组的所有的值
${arry[*]}
${arry[@]}

#获取数组的长度
${#arry[*]}

数组循环遍历

#for循环
for(( i=0;i<${arry[@]};i++))do
echo ${arry[i]};
done;

#for...in循环
for ele in ${arry[*]}do
echo $ele
done

#while循环
i=0
while [ 1 /> 2 ]do
echo "1大于2"
done

字符串转换为数组

方案1:按空格转换为
#!/bin/bash
arry=(A B C)
array=(${name// / })

方案2:$IFS
IFS(Internal Field Seprator),内部域分隔符,是shell的内置变量,当shell处理替换命令时,会根据IFS的值(默认是space/tab/newline)来进行变量分割

#!/bin/bash
arry=(A,B,C)
array=(${name// / })
IFS=$IFS #保留原始的
IFS=","
array=($arry)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值