shell学习
注释
#代表注释
多行注释(EOF可用其他其他替换)
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
变量:
变量名和等号之间不能有空格
定义变量不用带美元符号,使用时要
your_name="douji"
echo $your_name
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,在字符串中输出变量时常用
删除变量
unset variable_name
字符串
单引号,原样输出,变量不生效
双引号,可输出变量,可以有转义字符(常用)
获取字符串长度
${#string}
数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开
读取数组值
${数组名[下标]}
读取所有
echo ${array_name[@]}或${array_name[*]}
获取数组元素个数
echo ${#array[@]}
脚本中输出脚本的文件路径、参数个数,参数等
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
$只认一位数,超过一位数的要用{}括起来,eg
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";//$@是将参数分多个字符串输出
算数运算
expr,常用计算工具
- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
- 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边
eg:
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
关系运算
-eq,equal缩写
-ne, notequal
-gt,greaterthan
-lt,lessthan
-eg,equal or greater than
-el,
条件语句
要点:条件是中括号【】
if[条件1];then 行为 elif[条件2];then 行为 else 行为 fi
eg:
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
for循环
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
while语句
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
case语句
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,除了$123等表示第几个参数
运算符
布尔运算
!:非
-o:or,或
-a :and,且
逻辑运算符
&&
||
字符串运算符
-z:zero,字符串长度是否为0,是则返回true
-n:number,字符串长度是否不为0,是则返回true
=
!=
输出
echo,输入字符串使用
echo -e,开启转义,字符串里的转义次相应显示,eg:echo -e "hello\n",hello后换行
printf,格式化输出
eg:
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
解读:
%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。
%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中 .2 指保留2位小数。
# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf %s abc def
printf "%s\n" abc def
printf "%s %s %s\n" a b c d e f g h i j
# 如果没有 arguments,那么 %s 用NULL代替(输出为空),%d 用 0 代替
printf "%s and %d \n"
输入
read xxx,获取键盘输入内容并定义为变量xxx
函数:
函数名(){
执行语句
}
使用时用函数名,参数不需放在括号里,获取函数返回值,用$?,eg:
重定向
如果不想从键盘获取输入或输入内容到终端显示,想从文件获取内容作为输入或输出到文件
命令后跟符号和文件名
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |