待补充完善
定时器
变量设置规则:
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 判断条件时,用 (()) 来处理整型数字,用 [[ ]] 来处理字符串或者文件。