shell 脚本笔记

待补充完善

定时器


变量设置规则:
1,变量名称可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写,便于区分。

2,在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。

3,变量用等号连接值,等号左右两侧不能有空格。

4,变量的值如果有空格,需要使用单引号或者双引号包括。//注意要是英文输入法那种

设置变量:
习惯上用大写字母来命名变量。变量名以字母表示的字符开头,不能用数字。

变量调用
在使用变量时,要在变量名前加上前缀“$”.

使用echo 命令查看变量值。eg:echo $A


变量赋值
1,定义时赋值:
变量=值

等号两侧不能有空格

eg:

STR=“hello world”

A=9


将一个命令的执行结果赋给变量
A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A

A=$(ls -la) 等价于反引号

eg: aa=$((4+5))

bb=`expr 4 + 5 `


将一个变量赋给另一个变量
eg : A=$STR

变量叠加

eg:#aa=123

eg:#cc="$aa"456

eg:#dd=${aa}789


单引号和双引号区别:
单引号会使内容转义 例:
a=1;
echo ‘$a 123’ 输出:$a123
echo “$a 123” 输出:1123


列出所有的变量:
set

删除变量:
unset NAME

eg :

unset A 撤销变量 A

readonly B=2 声明静态的变量 B=2 ,不能 unset


位置参数变量
$n

n为数字,$0代表命令本身,$1-$9代表第一到第9个参数,

十以上的参数需要用大括号包含,如${10}。

$*

代表命令行中所有的参数,把所有的参数看成一个整体。以"$1 $2 … $n"的形式输出所有参数

$@

代表命令行中的所有参数,把每个参数区分对待。以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数

$#

代表命令行中所有参数的个数。添加到shell的参数个数
$* 和 $@的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" “包含时,都以”$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数

当它们被双引号" “包含时,”$*" 会将所有的参数作为一个整体,以"$1 $2 … n " 的 形 式 输 出 所 有 参 数 ; " n"的形式输出所有参数;" n""@" 会将各个参数分开,以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数


预定义变量
$?

执行上一个命令的返回值 执行成功,返回0,执行失败,返回非0(具体数字由命令决定)

$$

当前进程的进程号(PID),即当前脚本执行时生成的进程号

$!

后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程


read命令
read [选项] 值

read -p(提示语句) -n(字符个数) -t(等待时间,单位为秒) –s(隐藏输入) 对应密码那些输入

$()与${}的区别

$( )的用途和反引号``一样,用来表示优先执行的命令

eg:echo $(ls a.txt)

${ } 就是取变量了 eg:echo ${PATH}

$((运算内容)) 适用于数值运算

eg: echo $((3+1*4))


脚本调试
sh -x script
这将执行该脚本并显示所有变量的值。

set -x 对部分脚本调试

sh -n script
不执行脚本只是检查语法的模式,将返回所有语法错误。

sh –v script

执行并显示脚本内容


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[[ ]]是 Shell 内置关键字,它和 test 命令类似,也用来检测某个条件是否成立。
文件测试语句

请看下面的演示代码:
#!/bin/bash
read str1
read str2
if [[ -z $str1 ]] || [[ -z $str2 ]]  #不需要对变量名加双引号
then
    echo "字符串不能为空"
elif [[ $str1 < $str2 ]]  #不需要也不能对 < 进行转义
then
    echo "str1 < str2"
else
    echo "str1 >= str2"
fi

[[ -z $str1 || -z $str2 ]]

这种写法就比较简洁漂亮了。

[[ ]] 还支持正则表达式
在 Shell [[ ]] 中,可以使用=~来检测字符串是否符合某个正则表达式,它的用法为:
[[ str =~ regex ]]

下面的代码检测一个字符串是否是手机号:
#!/bin/bash
read tel
if [[ $tel =~ ^1[0-9]{10}$ ]]
then
    echo "你输入的是手机号码"
else
    echo "你输入的不是手机号码"
fi

有了 [[ ]],你还有什么理由使用 test 或者 [ ],[[ ]] 完全可以替代之,而且更加方便,更加强大。

但是 [[ ]] 对数字的比较仍然不友好,所以我建议,以后大家使用 if 判断条件时,用 (()) 来处理整型数字,用 [[ ]] 来处理字符串或者文件。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值