Shell脚本是来处理文件的!
基础绪论
shell语言是一种与操作系统进行交流的语言,跟python一样也是一个解释性的语言。
所以我们再用vim进行编辑shell脚本的时候需要写上
#! /bin/bash
这样就相当于我们对操作系统的说要用bash这个解释器来解释下面的语言。
一个具体的shell脚本(hello world)
#! /bin/bash
echo "Hello World"
把脚本写好后,有两种执行方式
1.直接用解释器进行
bash test.sh
2.作为可执行文件进行
(1).我们首先要给test.sh赋予可执行的权限:
chmod +x test.sh
后我们可以发现test.sh文件变成绿色了
(2).利用根目录或者绝对路径来执行即可
/home/acs/test/sh
~/test.sh
./test.sh
默认变量
$? #是获取退出状态 相当于c++中的return0
$(Command) #是返回Command的标准输出
$`Command` #与上面相同
在shell里面{}是取某个变量的值 ()是取stdout的值
expr命令
在shell中是不能求一个表达式的命令的,例如 3 + 5会报错的。所以它提供了expr命令来解决这个问题。expr是一个标准输出,所以需要用$()来获取这个标准输出
echo $(expr 3 + 5)
# 注意expr后面用空格作为分隔符
str="Hello World!"
echo $(expr length "$str")
echo `expr length "$str`
# expr也可以用于求字符串的长度 此时最好加个引号防止字符串内有空格出现报错
echo $(expr index "$str" aaa)
# expr还有个index操作返回字串中第一个字符出现的位置 下标从1开始
echo $(expr substr "$str" 2 3)
read命令
相当于cin与scanf,只是由于解释型语言的原因我们不用提前声明变量
read -p "What's your name?" name
echo "Hello," $name !
echo命令
跟C++中基本差不多 注意单引号内部的命令是不能执行的
name=xfl
echo "Hello $name"
echo 'Hellp $name' #这样的$是不会被执行的
还有echo跟python中的print一样都是后面自带换行符的并且echo直接输出不能转义 要下面这样写
echo -e "Hello \c" #注意字符串类一般加个双引号比较保险
echo World
echo $?
#获取上一个语句的退出状态
test命令
test命令与expr不一样,test是用exit code来返回真假的,所以在逻辑上会感觉有点错误,0表示进程正常结束即为真,非0表示进程非正常结束表示假。
判断文件是否存在
test -e test.sh && echo "Exit" || "Not exit"
# && 与 || 参考短路原则
ls -l #查看文件权限