shell语法的使用

#! /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 和 [ ] 的作用是差不多的,都是通过参数的不同进行一些不同的比较操作。通过返回值的不同实现自己想要的作用

猜你喜欢

转载自blog.csdn.net/qq_64468032/article/details/129358780