#! /bin/bash
name="yier"
echo "文件名:"$0
echo "第一个参数:"$1
echo "第二个参数:"$2
echo "第三个参数:"$3
echo "第四个参数:"$4
echo "进程ID:"$$
arr[0]=12
arr[1]="yier"
arr[100]=yier
echo ${arr[*]}
echo ${#arr[*]}
#数组
:<<E
定义
arr=(1 abc "12" yier) #直接定义整个数组
分开定义
arr[0]=1
arr[1]=abc
arr[2]="12"
arr[1000]=yier
echo ${#arr[idx]} 输出下标为idx的字符串的长度
E
#全局变量和局部变量
:<<E
#全局变量
name=yier
export name #第一种
declare -x name #第二种
#转为局部变量
declare +x name
export name=yier
E
#字符串
:<<EOF
单引号:纯字符串,不包含变量
双引号:里面用$调用的变量可以正常使用
求长度:用$ {#name} 中间没空格
提取子串:${name:x:y} 表示字符串name中第x到第y的子串,字符串是从下标0开始的。
EOF
#输出
:<<EOF
name="yier"
echo $name
该echo就相当于输出函数
$符号相当于取值
若是变量名两边有前后缀,那么则需要用大括号进行区分
EOF
#删除变量
:<<E
name="yier"
unset name #该函数就是将name字符串进行删除
E
# 注释
# 井号单注释一行
:<<EOF
段注释
#EOF可以用其它字符或者字符串进行替换
EOF
#下两行是将一个数据类型改为只读,不可修改
#eclare -r name
# readonly name
#shell
:<<EOF
第一行必须加上 #! /bin/bash
相当于规定执行方式用bash执行,规定编译器
EOF
echo 命令
输出命令
str='123456'
echo $str #直接输出字符串str
echo 123456 #输出普通字符串
echo -e "123\n456" #换行是 \n,-e后面的空格不能省略
echo -e "yier \c" #消除末尾的换行
echo "hello word" > output.txt #将字符串输出到文件里面
echo '$name \n' #原样输出,变量和转义字符都不会填充
expr命令
用于表达式的计算。
str="yier sansi!"
echo `expr length "$str"` #输出字符串的str的长度,含有空格的字符串需要加上双引号。
#注意echo命令里面输出的若是可执行命令,那么则需要加上 ` ` ,不是单引号。
a=1
b=2
echo `expr $a + $b` #输出 a + b
echo `expr $a \* $b` #输出 a * b
echo `expr $a / $b` #输出 a / b
echo `expr \( $a + 1 \) \* \( $b + 1 \)` #输出 (a + 1)*(b + 1)
# 注意 有些符号不能直接使用需要加上转义字符 \ 。例:( ) *
#转义可以用单引号或者反斜杠。
a=3
b=4
echo `expr $a \> $b` # 输出0,>需要转义
echo `expr $a '<' $b` # 输出1,也可以将特殊字符用引号引起来
echo `expr $a '>=' $b` # 输出0
echo `expr $a \<\= $b` # 输出1
c=0
d=5
echo `expr $c \& $d` # 输出0
echo `expr $a \& $b` # 输出3
echo `expr $c \| $d` # 输出5
echo `expr $a \| $b` # 输出3
read命令
该命令就相当于C++里面的cin 读入信息
read name #从键盘读入信息
read -p"给用户的提示信息 " $name
#可以跟用户说要输入什么内容
read -p"给用户的提示信息 " -t x $name
#-t 表示会等待用户x秒,规定时间内未进行输入则直接跳过该指令。
printf命令
该命令跟C语言里面的printf用法一样,只不过使用空格隔开的每一项。
# 注意是空格隔开
printf "%10d.\n" 123 # 占10位,右对齐
printf "%-10.2f.\n" 123.123321 # 占10位,保留2位小数,左对齐
printf "My name is %s\n" "yxc" # 格式化输出字符串
printf "%d * %d = %d\n" 2 3 `expr 2 \* 3` # 表达式的值作为参数
test 命令
就是用逻辑运算符来实现。
test 和 [ ] 的作用是差不多的,都是通过参数的不同进行一些不同的比较操作。通过返回值的不同实现自己想要的作用