Shell编程

Shell编程

让.sh可执行

修改文件属性

chmod a+x xxx.sh

添加注释

在.sh脚本脚本中添加如下注释

#!/usr/bash

使用变量

变量分类

  • 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

变量命名

  • 首个字符必须为字母(a-z,A-Z)。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

定义变量

#定义字符串(注意等号之间不可以有空格)
    var="this is a string!"
#定义数字
    var=100
#定义只读变量
    readonly var

使用变量

#无括号
echo $var
#有括号
echo ${var}
#删除变量
unset var

字符串

定义字符串

a='a'
#单引号定义字符串
str='this is a ${a}'
##结果为this is a ${a},单引号内的任何字符串都会原样输出

#双引号定义字符串
str="this is a ${a}"
##结果为this is a a,双引号里边可以出现转义字符,并可以有变量

字符串的相关操作


#拼接字符串
str1="hello"
str2="world"
str="${str1} ${str2}"

#获取字符串长度
echo ${#str}

#提取子字符串
echo ${str:1:4}

Shell数组

定义数组

array=(1 2 3 4 5)
arraystr=("a" "b" "c" "d")


#可以单独定义数组的值
array[0]=value0
...
array[n]=valuen

使用字符串

#使用数组元素的一般格式是:
${array[n]}

#获取数组所有元素
${array[@]}

#获取数组长度
length=${array[@]}

运算符

算术运算符

shell本身不支持算术运算符,需要使用expr进行算术运算
或者使用let

逻辑运算符

注意逻辑运算符的格式如下 :

    [ a op b ]
#注意中间的空格
#如果为真返回0,如果为假返回1
关系运算符
运算符说明
-eq==
-ne!=
-gt>
-lt<
-ge
=
-le<=
逻辑运算符
  • &&
  • ll
字符串运算符
运算符说明
=判断是否相等
!=是否不等
-z是否长度为0
-n是否有内容
str等同于-n
文件测试运算符
操作符说明举例
-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。

输入输出

输出

echo
echo something
printf
#same as `printf` in C
printf "%d" 100

输入

read
read var

流程控制

分支结构

if [ condition ]
then
    command
elif 
then
    command
else 
    command
fi
case var in
value-1)
    command;;
value-1)
    command;;
*)
    command;;
esac

循环结构

for var in item1 item2
do
    command
done 
while condition(true/:)
do
    command
done

函数

定义函数

[function] fun [()]
{
    command
    [return value;]
}

使用函数

  • 函数相当于一条语句
  • 用$?获取函数返回结果
  • 在函数中用 1, 2获取参数

文件包含

#包含文件
. filename
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值