shell脚本语法

#!/bin/sh
#!/bin/bash
#!/user/bin/env/ bash

python中:
#!/user/bin/env/ python

1.创建 .sh文件

2.编写
echo "hello"
echo "i am liyinhang"
exit 0

3.执行 chmod a+x xx.sh
对脚本授予可执行权限

4.输入 ./xx.sh
执行脚本

5.查看脚本退出状态:echo $?
    -linux中所有程序执行后都有状态码
    -状态码为 0 表示正常,状态码为 正整数 代表异常推出

二、变量
1.定义
 #变量定义:等号前后没有空格
 a=12345
 b=xyz

2.使用
#使用变量时,变量名前面加上$符
echo "---$a---\n===$b==="
printf "---$a---\n===$b===\n"
两者区别在于echo自动换行,printf不换行

3.注意引号的差别
echo "---$a---\n===$b==="
echo '---$a---\n===$b===\n'

4.定义当前shell下的全局变量
    -定义:export ABC=9876543212
    -定义完成后,在终端里用source加载脚本:source xx.sh

5.常用的系统环境变量
    -$PATH:可执行文件目录
    -$PWD:当前目录
    -$HOME:家目录
    -$USER:当前用户名
    -$UID:当前用户的uid

三、获取用户的输入
read -p "请输入一个数字:"num
echo "您输入的时:$num"

四、脚本里的引号
1.反引号:里面的内容会被解析成为脚本
echo `ls -a /home/chris`  #打印 /home/chris目录下所有的文件和文件夹

2.双引号:它里面的内容会被原样显示,但如果是一个变量,这个变量会被解析
name=liyinhang
echo "大家好,我是$name"  #大家好,我是liyinhang

3.单引号:它里面的内容会完全原样输出
name=zhangsan
echo '大家好,我是$name'  # 大家好,我是$name

五、脚本里的$
1.${var} 用来获取一个变量的值,一般情况下,大括号可以省略不写
name=bank
echo ${name}   #bank
echo $name     #bank

2.特殊变量
$# 代表传入参数的个数
$@ 代表传入参数的列表
$0 代表脚本本身
$1 代表传入的第一个参数,$2$3...以此类推
$* 以字符串方式显示所有传入的参数
$$ 脚本运行的进程ID
$? 显示最后命令的退出状况,0表示没有错误

3.$(cmd)用来执行括号里的脚本命令,相当于使用反引号
echo $(ls /home/chris/Desktop)  # 列出当前用户的桌面上的所有文件和文件夹

4.$((expression))用来计算数学表达式expression的值
echo $((1+1))  # 2

六、分支语句
1.if
if command;then
  commands
elif command;then
  commands
else
  commands
fi

2.条件测试命令
[ ... ]:参数两边必须有空格
它可以进行三种比较
    -数值比较
    -字符串比较
    -文件比较
用法:
if [ condition ];then
  commands
fi

数值比较
Condition	说明
n1 -eq n2	检查n1是否与n2相等
n1 -ge n2	检查n1是否大于或等于n2
n1 -gt n2	检查n1是否大于n2
n1 -le n2	检查n1是否小于n2
n1 -lt n2	检查n1是否小于n2
n1 -ne n2	检查n1是否不等于n2

字符串比较
Condition	说明
str1 = str2	检查str1是否和str2相同(注意:等号两边要加空格)
str1!=str2	检查str1是否和str2不同
str1<str2	检查str1是否小于str2(需要使用[[]])
str1>str2	检查str1是否大于str2(需要使用[[]])
-n str1	检查str1的长度是否非0(变量需要添加双引号)
-z str1	检查str1的长度是否为0

文件比较
Condition	说明
-d file	检查file是否存在并且是一个目录
-e file	检查file是否存在
-f file	检查file是否存在并且是一个文件
-r file	检查file是否存在并且可读
-w file	检查file是否存在并且可写
-x file	检查file是否存在并且可执行
-s file	检查file是否存在并且非空
-O file	检查file是否存在并且属于当前用户所有
-G file	检查file是否存在并且所属组与当前用户相同
file1 -nt file2	检查file1是否比file2新
file1 -ot file2	检查file1是否比file2旧


七、case语句
#!/bin/bash
read -p "请输入数字" num
case $num in
    0)
        echo 星期日
        ;;
    1)
        echo 星期一
        ;;
    2)
        echo 星期二
        ;;
    3)
        echo 星期三
        ;;
    4)
        echo 星期四
        ;;
    5)
        echo 星期五
        ;;
    6)
        echo 星期六
        ;;
    *)
        echo 其他
        ;;
esac

八、循环语句:for
基本格式:
 for 变量 in 序列
 do
     要执行的命令
 done

eg:
 for i in `seq 1 10`
 do
     if [ $[ $i % 2] == 0 ]
     then
         echo "偶数: $i"
     else
         echo "奇数: $i"
     fi
 done

seq START END 语句用来产生一个数字序列
$[ NUM1 + NUM2 ] 语句用来进行基本的数学运算
[[ ... ]] 语句用来更方便的进行比较判断


九、函数
 function foo() {
     echo "---------------------------"
     echo "Hello $1, nice to meet you!"
     echo "---------------------------"
 }
function可以省略
传参:
foo arg1 arg2 arg3 ...

eg:
 bar() {
     echo "执行者是 $0"
     echo "参数数量是 $#"
     echo "全部的参数 $@"
     echo "全部的参数 $*"

     if [ -d $1 ]; then  # 检查传入的第一个参数是否是文件夹
         for f in `ls $1`
         do
             echo $f
         done
     elif [ -f $1 ]; then
         echo "This is a file: $1"  # 如果不是文件夹, 直接显示文件名
     else
         echo 'not valid'  # 前面都不匹配显示默认语句
     fi
 }
 bar $1

十、数组
1.Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 ... valuen)
2.也可以直接使用下标来定义一个数组。
num[0]=1
num[1]="good"
num[2]=yes

3.使用下标可以直接修改数组里的数据
arr=(hello good "yes" 12)
arr[0]=hi

4.使用$和下标可以获取一个数组里的数据,但是注意需要使用{}来包裹变量
arr=(hello good "yes" a 12)
echo ${arr[0]}

5.使用*或者@作为下标,可以获取数组里的所有数据。
arr=(hello good "yes" a 12)
echo ${arr[*]}
echo ${arr[@]}

6.在获取所有数据的前面添加# 可以获取到数组的长度
arr=(hello good "yes" a 12)
echo ${#arr[*]}
echo ${#arr[@]}

7.for...in 遍历
#!/bin/bash
arr=(hello good 12 'yes' hi)
for ele in ${arr[*]}
do
    echo $ele
done



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

͝͝͝͝͝͝͝͝͝͝L Y H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值