美文网首页
shell脚本语言学习

shell脚本语言学习

作者: 华语新空 | 来源:发表于2019-06-14 14:09 被阅读0次

    shell脚本语言

    #等号和变量之间,等号和值之间不能有空格
    echo '百度'
    youName='小白'
    echo $youName
    #打印当前目录文件
    for file in `ls`; do
    #    echo "I am good at ${file}Script"
        echo "当前文件 ${file} aa"
    done
    
    for loop in 1 2 3 4 5; do
        echo "The value is: $loop"
    done
    youName="我是对的"
    echo $youName
    
    #-e 使换行生效
    your_name='runoob'
    str="Hello, I know you are \"$your_name\"! \n"
    echo -e $str #-e 开启转义
    #获取字符串的长度
    echo '字符串的长度:'${#your_name}
    #字符串截取 第一个参数是从那个位置开始截取,后一个参数是截取几位
    echo '截取字符串从第0位开始,截2位是:'${your_name:0:2}
    
    #数组
    arry_name=("小明" "小bai" "小hua")
    for name in ${arry_name[@]}; do
        echo $name
    done
    echo 'arry_name数组的长度为'${#arry_name[@]}
    echo '获取数组中所有元素:'${arry_name[@]}
    echo '获取数组的第一个:'${arry_name[0]}
    arry_name[0]="我是笑话"
    echo '改变数组后的第一个:'${arry_name[0]}
    
    #传参
    echo "执行的文件名:$0"
    echo "第一个参数为:$1"
    echo "参数个数为:$#"
    echo "传递的参数作为一个字符串显示:$*"
    echo "脚本运行的当前进程ID号:$$"
    
    if [ -n "$1" ]; then
    echo "包含第一个参数"
    else
    echo "没有包含第一参数"
    fi
    
    #运算符 表达式和运算符之间要有空格
    
    #-eq    检测两个数是否相等,相等返回 true。    [ $a -eq $b ] 返回 false。
    #-ne    检测两个数是否不相等,不相等返回 true。    [ $a -ne $b ] 返回 true。
    #-gt    检测左边的数是否大于右边的,如果是,则返回 true。    [ $a -gt $b ] 返回 false。
    #-lt    检测左边的数是否小于右边的,如果是,则返回 true。    [ $a -lt $b ] 返回 true。
    #-ge    检测左边的数是否大于等于右边的,如果是,则返回 true。    [ $a -ge $b ] 返回 false。
    #-le    检测左边的数是否小于等于右边的,如果是,则返回 true。    [ $a -le $b ] 返回 true。
    val=`expr 2 + 2`
    
    result=$[2 + 2]
    echo "2个数之和:$result"
    echo "2个数之和:$val"
    
    if [ 2 == 2 ]
    then
    echo "2 等于 2"
    fi
    if [ 2 != 3 ]
    then
    echo "2 不等于 3"
    fi
    
    #!    非运算,表达式为 true 则返回 false,否则返回 true。    [ ! false ] 返回 true。
    #-o    或运算,有一个表达式为 true 则返回 true。    [ $a -lt 20 -o $b -gt 100 ] 返回 true。
    #-a    与运算,两个表达式都为 true 才返回 true。    [ $a -lt 20 -a $b -gt 100 ] 返回 false。
    
    if [ 90 -lt 100 -a 100 -gt 15 ]
    then
    echo "90 小于 100 且 100 大于 15 : 返回 true"
    else
    echo "90 小于 100 且 100 大于 15 : 返回 false"
    fi
    
    if [ 20 -lt 100 -o 10 -gt 100 ]
    then
    echo "20 小于 100 或 10 大于 100 : 返回 true"
    else
    echo "20 小于 100 或 10 大于 100 : 返回 false"
    fi
    #&&    逻辑的 AND    [[ $a -lt 100 && $b -gt 100 ]] 返回 false
    #||    逻辑的 OR    [[ $a -lt 100 || $b -gt 100 ]] 返回 true
    
    a=10
    b=20
    
    if [[ $a -lt 100 && $b -gt 100 ]]
    then
    echo "返回 true"
    else
    echo "返回 false"
    fi
    
    if [[ $a -lt 100 || $b -gt 100 ]]
    then
    echo "返回 true"
    else
    echo "返回 false"
    fi
    
    #字符串运算符
    
    #运算符    说明    举例
    #=    检测两个字符串是否相等,相等返回 true。    [ $a = $b ] 返回 false。
    #!=    检测两个字符串是否相等,不相等返回 true。    [ $a != $b ] 返回 true。
    #-z    检测字符串长度是否为0,为0返回 true。    [ -z $a ] 返回 false。
    #-n    检测字符串长度是否为0,不为0返回 true。    [ -n "$a" ] 返回 true。
    #$    检测字符串是否为空,不为空返回 true。    [ $a ] 返回 true。
    
    a="abc"
    b="efg"
    
    if [ $a = $b ]
    then
    echo "$a = $b : a 等于 b"
    else
    echo "$a = $b: a 不等于 b"
    fi
    if [ $a != $b ]
    then
    echo "$a != $b : a 不等于 b"
    else
    echo "$a != $b: a 等于 b"
    fi
    if [ -z $a ]
    then
    echo "-z $a : 字符串长度为 0"
    else
    echo "-z $a : 字符串长度不为 0"
    fi
    if [ -n "$a" ]
    then
    echo "-n $a : 字符串长度不为 0"
    else
    echo "-n $a : 字符串长度为 0"
    fi
    if [ $a ]
    then
    echo "$a : 字符串不为空"
    else
    echo "$a : 字符串为空"
    fi
    
    #文件操作
    #-b file    检测文件是否是块设备文件,如果是,则返回 true。    [ -b $file ] 返回 false。
    #-c file    检测文件是否是字符设备文件,如果是,则返回 true。    [ -c $file ] 返回 false。
    #-d file    检测文件是否是目录,如果是,则返回 true。    [ -d $file ] 返回 false。
    #-f file    检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。    [ -f $file ] 返回 true。
    #-g file    检测文件是否设置了 SGID 位,如果是,则返回 true。    [ -g $file ] 返回 false。
    #-k file    检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。    [ -k $file ] 返回 false。
    #-p file    检测文件是否是有名管道,如果是,则返回 true。    [ -p $file ] 返回 false。
    #-u file    检测文件是否设置了 SUID 位,如果是,则返回 true。    [ -u $file ] 返回 false。
    #-r file    检测文件是否可读,如果是,则返回 true。    [ -r $file ] 返回 true。
    #-w file    检测文件是否可写,如果是,则返回 true。    [ -w $file ] 返回 true。
    #-x file    检测文件是否可执行,如果是,则返回 true。    [ -x $file ] 返回 true。
    #-s file    检测文件是否为空(文件大小是否大于0),不为空返回 true。    [ -s $file ] 返回 true。
    #-e file    检测文件(包括目录)是否存在,如果是,则返回 true。    [ -e $file ] 返回 true。
    file="/Users/xhl/Deskto/test.sh"
    if [ -r $file ]
    then
    echo "文件可读"
    else
    echo "文件不可读"
    fi
    
    #echo '今天的日期'`date` >test.txt #输入到test.txt文件中
    
    printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
    printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
    printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
    printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
    
    printf "%d %s\n" 1 "abc"
    
    #-e 文件名    如果文件存在则为真
    #-r 文件名    如果文件存在且可读则为真
    #-w 文件名    如果文件存在且可写则为真
    #-x 文件名    如果文件存在且可执行则为真
    #-s 文件名    如果文件存在且至少有一个字符则为真
    #-d 文件名    如果文件存在且为目录则为真
    #-f 文件名    如果文件存在且为普通文件则为真
    #-c 文件名    如果文件存在且为字符型特殊文件则为真
    #-b 文件名    如果文件存在且为块特殊文件则为真
    cd /bin
    if test -e ./bash
    then
        echo '文件已存在!'
    else
        echo '文件不存在!'
    fi
    
    ##输入数据
    #echo '按下 <CTRL-D> 退出'
    #echo -n '输入你最喜欢的网站名: '
    #while read FILM
    #do
    #echo "是的!$FILM 是一个好网站"
    #done
    
    for((i=1;i<=5;i++));do
        echo "这是第 $i 次调用";
    done;
    
    demoFun(){
    echo "这是我的第一个 shell 函数!"
    }
    demoFun
    
    #command > file    将输出重定向到 file。
    #command < file    将输入重定向到 file。
    #command >> file    将输出以追加的方式重定向到 file。
    #n > file    将文件描述符为 n 的文件重定向到 file。
    #n >> file    将文件描述符为 n 的文件以追加的方式重定向到 file。
    #n >& m    将输出文件 m 和 n 合并。
    #n <& m    将输入文件 m 和 n 合并。
    #<< tag    将开始标记 tag 和结束标记 tag 之间的内容作为输入。
    

    相关文章

      网友评论

          本文标题:shell脚本语言学习

          本文链接:https://www.haomeiwen.com/subject/xcaufctx.html