shell script基础

shell前面需写上#!/bin/bash
可以用echo向屏幕中输出内容,加上-e后可使用转义符
eg echo -e “Hello World\n\a”

用read可以读取输入内容

shell script中可以进行运算,但是记得每个变量类型是字符串。所以进行运算时需要声明
declare -i sum= num1+ num2
或者直接写作sum=$((num1+num2))

判断表达式

可以用test来进行判断。

test 选项 内容
常用的选项有:
-e 文件是否存在
-f 是否是文件
-d 是否是目录
-z 该字符串是否为空字符串,如果是则返回true
两数值比较的:eg test n1 -eq n2
-eq 两数值是否相等
-ne 两数值是否不等
-gt n1大于n2
-lt n1小于n2
-ge n1大于且等于n2
-le n1小于且等于n2
#这里说一下&& 和 ||
command1 && command2
#当command1执行为真,command2才会被执行。
command1 || command2
#与&&相反,当command1执行为假,command2才会被执行。如果command1执行为真则command2不执行

test一般与shell中的&&和||搭配着用。但是在一些场景使用起来还是比较复杂。所以还有if..fi和case..esac判断式

if [ "$choice" == "yes" ];then
...
fi
#注意这里在[]两边都需要加空格,并且变量choice需要用""括起。fi表示终止if括起的范围

多判断:
if [ "$choice" == "yes" ];then
...
else
...
fi

或
if [ "$choice" == "yes" ];then
...
elif [ "$choice" == "no" ] || [ "$choice" == "NO" ];then 
...
else
...
fi
case:
#以case $变量 in开始,以esac结束case
#注意每一个分支需要用"...")表示,用;;表示这个分支的结束。*)表示其他分支,类似于c语言中case语句的default。
case $choice in
    "yes")
        ...
        ;;
    "no")   
        ...
        ;;
    *)
        ... 
        ;;
esac

循环表达式

循环表达式有while和until,以及for循环。其使用方法与c语言中的类似。

#注意这里的[]中用到判断表达式需要用test中的判断
while [ ]
do 
...
done

for var in con1 con2 con3...
do 
...
done
#这里的con1和con2...将会赋值给var。执行次数便是con的个数。默认
eg1.
for s in one two three
do
echo -e  "lord i am $s"
done
#上面那个感觉还是挺麻烦的,如果我要列1..100,那我岂不是要写到100个参数
#所以有另一种方法通过$(seq 1 10)表示由1到100连续的。默认步长为1
#如需要改变,则用by关键字
eg2.
net=198.0.0
for sit in $(seq 1 10)
do
        echo -e "your ip is $net.$sit\n"
done

#类似c语言中的for循环
for ((初始化;限定条件;自增表达式))
do
...
done

shell script的参数

我们可以在调用sh时将外部参数传入到程序中。

#同时我们可以在文件中调用外部传入的参数
$0即是文件名,$1是第一个参数
$@是所有参数,$#是参数的个数
eg.
./filesh.sh abc #shell文件名为filesh.sh,参数为abc
文件内容如下:
echo  "your arguement is $@"
echo "filename is $0"
echo "file arguement $#"
echo "first arguement $1"

function函数

与c语言类似,shell script也有函数功能。可以实现对代码的重用性。

function fname()
{
...
}
#这里需要注意的是,因为shell script是由上到下,由左到右执行,所以函数需放在调用其前面。函数也可以拥有内置变量$1..但是这个内置变量是参照于调用其的地方

script的调试

最后,编写完shell后,如果对shell script的正确性有疑问的话,可以对shell进行调试。

sh [-nvx]  script.sh
-n 不执行script,仅查询语法问题,如果没有问题则没有输出
-v 在执行script前,将内容输出
-x 将输出步骤输出

script的执行

注意有几种script的执行方式

./test.sh
sh test.sh
source test.sh

#这三种虽然都是执行shellscript,但是都有区别。前两种执行是另开一个子bash中执行的,所以其中script中定义的变量在父bash中便没有了。而source是直接在父bash中执行的。所以如果执行这个script后想在父bash中使用里面的变量的话,需用source执行.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值