bash编程

#####   
##变量定义
    =两边不能空格,如果内容有空格,需要使?单引号或者双引号
    x="1 2"
    echo $x   # 1 2
    x=1 2  # 报错
    双引号持转义 $开头的变量会被动替换(单引号不行)
    echo "1 2 $x"    # 1 2 1 2
    
    echo $'\n'输出换行
    echo $((1+3))  # 4
    echo $((3/2))  # 1  取整
    awk BEGIN'{print 1/3}'
0.333333
    布尔值:
    当程序正常执行后:echo $?  得到 0   $?为执行命令返回值
    当程序不正常执行后:echo $?  得到 2
    0为true  其他都为false
    算术判断:
    [2 -eq 2] equality相等
    [2 -ne 2] 不相等
    [2 -gt 2] great than大于
    [2 -ge 2] great equality
    [2 -le 2] less equality
    字符串却可以 == != 比较
    
    &&与 ||或有些不支持 所以用 -a与  -r或
    
    [ -e 1.txt ] # 判断文件是否存在,需要打印ehco $? 来看
    -d:是否是子目录
    -f:是否是一个普通文件
    if [ -e 2.txt ];then echo is exit;else echo not exit;fi
is exit
    if [-e 2.txt];then echo is exit;else echo not exit;fi #[要有空格]不然出错
-bash: [-e: command not found
not exit
    for i in 1 2 3 4;
> do echo $i;
> done
1
2
3
4
    for f in *.txt;do wc -l $f;done
2 1.txt
32 2.txt
    for i in $(seq 1 3 10);do echo $i;done
1
4
7
10
    while read line;do echo line=$line;done < 2.txt
    
##写脚本
    注释号是:#
    函数的书写
    f(){
> wc -l *.txt
> }
    type f #可以查看函数
    f # 执行函数
    f(){ echo p1=$1; echo p2=$2; echo p3=$*; echo p4=$#; echo p5=${#*}; }
    f a b c d e f g h  # 传参数
p1=a
p2=b
p3=a b c d e f g h
p4=8
p5=8
    f(){
> wc -l $@  # $@是要传进来的参数
> }
    bash 1.sh 1.txt # bash是执行1.sh文件 1.txt是传进去的参数
    chmod +x 1.sh  添加权限,给所有都加x权限
    ./1.sh *.txt 也可以执行
    bash -x 1.sh *.txt # 会有调试过程
    #!/bin/bash 脚本文件顶行,提示用哪个程序去执行当下脚本,有这一句即使不是.sh结尾的文件,也会是.sh文件来执行
    a=123
    echo ${a}_1  # 会打印123_1
    echo $bsk  # 即使bsk还没被定义也不会报错
    which python  # 可以查看python安装在那里
    export PATH=$PATH:$PWD  加环境变量的办法这样就可以which 1.sh了
    arry=(1 2 3)
    echo ${arry[@]}  # 这样才能完整打印数组@改为*也是可以的习惯用@
    echo ${#arry[*]}  # 得到数组的长度 3 
    echo ${arry[0]}     # 1    索引从0开始的 -1最后一项
    ``:反引号,就是把里面返回的内容拿出来`ls`=$(ls) 拿到返回的文件名
    arry=(`ls`) 
    每条命令使用;隔开
    echo -e a\nbb   # -e就是开启转移模式,\n看作是换行
    (()):用作计算$((a+b))=$(($a+$b)) 用作比较(($a<$b)) echo $?
    seq 1 10 # 1 2 3 4 5 6 7 8 9 10
    arry=(`seq 1 10`)
    s="hello from your friend"
    echo ${s:6:7;}  # 索引6开始取后面7个
    echo ${s#hello} # from your friend  把hello去掉
    echo "${s#hello}" #   from your friend  把hello去掉,from前的空格保留
    echo "${s#*o}"  #  from your friend
    echo "${s##*o}"   # ur friend  贪婪匹配
    echo "${s%f*}"  # hello from your 去尾  %%也是贪婪
    echo ${s/friend/son}  # hello from your son 
    false和[ 3 -eq 2 ]   看一下echo $?  # 1
    []、(())里面可以用>= <= ! =这些符号
    [ -n "$b"]  # 判断字符串b不是空 返回0
    [ -z "$b"]  # 判断字符串b是空 返回0
    [ a -eq b -a a -ge 5 ]   -a是与的意思  或是-o
    [[ a -eq b && a -ge 5 ]] 这样也行  ||或  推荐用[]
    [ ! 2 -ge 1]  # 2不大于等于1
    ls -l = ll  
    ls dir && echo exist || echo not exist # 如果文件夹存在,打印出现,不然打印not exist 
    echo 1 && echo 2 || echo 3 && echo 4 || echo 5 # 1 2 4
    因为||若||前面为真||后面就不执行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值