LINUX学习(1)
read命令从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。
语法
read(选项)(参数)
选项
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
read -p "enter:" -t 10 a b
enter:1 5
echo $a $b
在bash shell中,$( )与` `(反引号)都是用来做命令替换(command substitution)用的。
一般情况下,$var与${var}作用相同。但是用${ }会比较精确的界定变量名称的范围
$ A=B
$ echo $AB
原本是打算先将$A的结果替换出来,然后再补一个B字母于其后,但在命令行上,真正的结果却是只会替换变量名称为AB的值出来。
使用${ }就没问题了:
$ echo ${A}B
BB
运行shell脚本
1、作为可执行程序
将代码保存为 sh01.sh,并 cd 到相应目录:
chmod +x ./sh01.sh #使脚本具有执行权限
./sh01.sh #执行脚本
注意,一定要写成 ./sh01.sh,而不是 sh01.sh,运行其它二进制的程序也一样,直接写 sh01.sh,linux 系统会去 PATH 里寻找有没有叫 sh01.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 sh01.sh 是会找不到命令的,要用 ./sh01.sh 告诉系统说,就在当前目录找,除非定义了PATH路径。
2、以bash进程来执行,通过 bash shell.sh 或者sh shell.sh 。
获取字符串长度
string="abcd"
echo ${#string} #输出 4
提取子字符串
以下实例从字符串第 2 个字符开始截取 4 个字符:
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
查找子字符串
查找字符 "i 或 s" 的位置:
string="runoob is a great company"
echo `expr index "$string" is` # 输出 8 "$string" 要加双引号
定义数组
在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
例如:
array_name=(value0 value1 value2 value3) //一般用空格和回车!
使用@符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
实例
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名:
#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
执行 bash a.sh 1 2 3
Shell 传递参数实例! 执行的文件名:a.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val" //4
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
== 相等。用于比较两个数字,相同则返回 true。
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
if [ $a == $b ]
then
echo "a 等于 b"
fi
乘号(*)前边必须加反斜杠(\)才能实现乘法运算,在expr语句中。
在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\" ,另一种形式。
-o 或运算,有一个表达式为 true 则返回 true。
-a 与运算,两个表达式都为 true 才返回 true。
&& 逻辑的 AND
|| 逻辑的 OR
= 检测两个字符串是否相等,相等返回 true。
if [ $a = $b ] then echo "$a = $b : a 等于 b" else echo "$a = $b: a 不等于 b" fi
检测字符串是否为空
if [ $a ]
then
echo "$a : 字符串不为空"
else
echo "$a : 字符串为空"
fi
echo -e "OK! \n" # -e 开启转义 没有-e,直接输出\n
1、&&
方式:command1 && command2
如果command1执行成功,则执行command2
2、||
方式:command1 || command2
如果command1执行失败,则执行command2