shell脚本

一、shell变量

shell 编程的基本过程

    1、创建以.sh结尾的shell文件
    2、赋予shell文件的可执行权
    3、执行shell程序

注意:
    1、执行的时候可以选择使用bash xxx.sh来执行shell程序或者source xxx.sh,这样就不用给shell文件赋权
    2、如果不选择上述两种方法则执行shell程序的命令为:./xxx.sh
    3、./xxx.sh适用于所有脚本的运行,需要赋予权限;
    4、bash xxx.sh默认由/bin/bash解释
	5、./xxx.sh和bash xxx.sh 在执行的时候都是创建一个子终端执行再将结果返回到当前终端
	6、source xxx.sh 是在当前终端之心,一般用于让脚本生效

一个简单的demo

	eg:
	1、在家目录下创建一个目录mydir
	2、将/etc/passwd和/etc/groff拷贝到mydir中
	3、再将mydir归档并压缩为mydir.tar.gz



#!/bin/bash  #这段代码的意思是bin目录下的bash来解释本程序

mkdir ~/mydir
cp /etc/passwd ~/mydir
cp -r /ect/groff ~/mydir
tar -xzvf mydir.tar.gz ~/mydir

二、shell变量

:>> !
    1、自定义变量:

        1、跟C语言的语法一致
        2、变量前面不需要数据类型
        3、变量的内容一律视为字符串
        4、变脸不需要提前定义就可以直接使用
        5、变量的后面不需要;结束
        6、在对变量赋值的时候=两边不能有空格
   
     2、位置变量(相当于命令行参数)
        $0 $1 .....
       
      3、环境变量
        PATH HOME....
!
eg:

    #!/bin/bash
       var=10
       count=1

三、变量的引用

:<< !
    在对变量的引用时,需要在变量前面加上$
    注意:需要用钱才能使用变量
!

eg:
    #!bin/bash
    var=hello
     echo $var  #打印var变量里面的值

四、变量的赋值

#!/bin/bash
var=123
echo $var
#对var进行重新赋值
var=hello
echo $var

:<<!
当字符串空格的时候,赋值的时候需要加引号,单引号和双引号都可,如果引号里面有引用变量的情况,就必须使用双引号;

!
var2="$var world"
echo $var


#变量的取消赋值
unset 变量名
eg:
    unset var

一个小demo

:<<!
eg:
编写一个脚本,定义两个变量保存环境变量HOME和PATH的值并交换	
!

#!/etc/bash
path=$PATH
home=$HOME
echo $path
echo $home
echo "---------------"
tmp=$path
$path=$home
home=$tmp
echo $path
echo $hoem

五、命令置换

将一个命令的结果赋值给一个变量
eg:
    var = `ls`
    #将ls查询出来的结果赋值给var
    #可以打印var来查看结果
    echo $var

六、位置变量

:<<!
命令行参数
    $0 $1 $2 $3.....${10}...

    ps:
    1、$0:表示的是脚本文件的文件名,如果用的是source来执行的话$0结果为bash
    2、$@ 和 $* 表示的使所有的命令行参数
    3、$1....代表的是在命令行输出的参数一个参数用一个$1来接收
    4、$$ 预定义的变量,脚本执行的进程号

set 将命令置换的结果赋值给命令行参数    
!
eg:
    #!/bin/bash
    
    ret = `grep $1 $2 -ni`
    # $1 和 $2折两个参数由终端输入
    # ps: bash xxx.sh "str" 文件名  查找文件中的str字符
    echo $ret
       #将上述的查询结果打印出来

七、echo输出

echo "str"
#直接输出str

echo -n str
#输出结果不换行

ps:
    一般在使用echo输出的时候,结果都会换行

八、字符串

1、字符串的拷贝

#!/bin/bash
str1=hello
str2=world
str1=${str2}

2、字符串连接

#!/bin/bash

str1=hello
str2=world
str1="${str1}${str2}"
#注意在使用字符串拼接的时候要加上""
echo $str1

3、字符串长度

#!/bin/bash

str="www.baidu.com"
var=${#str} 
# 求长度只需要加上#即可
echo var

4、字符串的提取

#!/bin/bash

str="www.baidu.com"

# 1、${str:start:len}
# 从左向右数到start位置,提取其后的len个字符

# eg:
      echo ${str:4:3}
        #提取出来的结果为bai

# 2、${str:start}
#  从左到右数到start个位置,提取其后的全部字符
#eg:
    ${str:4}
    #提取的结果为baidu.com

# 3、 ${str:0-strat:len}
# 从右往左数到strat的位置提取该位置以及后面的len-1个字符
#eg:
    echo${str:0-4:4}
    #结果为:.com

#4、 ${start:0-start}
#从左往右数到第start位置,提取该位置及后面的全部字符
#eg:
	${str:0-5} 
	#结果:u.com

5、字符串的查找

#在一个字符串里面查找子字符串
#!/bin/bash

str="www.baidu.com"
# 1、${str#*sub}
#str母串
#sub子串
#从左往右数提取第一个子串后面的所有字符
#eg:
echo ${str#*www.}
    #结果为:  baidu.com

# 2、${str##*sub}
# 从左往右数提取最后一个子串后面的所有字符
#eg:
echo ${str##*ww}
    #结果为:  baidu.com

# 3、${str%sub*}
# 从右往左数提取第一个子串前面的所有字符
#eg:
echo ${str%.com*}
    #结果为:  www.baidu

# 4、${str%%sub*}
# 从右往左数提取最后一个子串前面的所有字符
#eg:
echo ${str%%bai*}
    #结果为:  www.

九、数组

:<<!
数组的初始化
数组的引用
求数组长度
在数组后追加赋值
在数组的前追加值同理在后面追加
注意:不管是顺序初始化还是跳跃初始化,在数组的整体前后赋值,数组里的元素会重新排列,有空格的字符串会被拆分开,作为多个元素,下标是跳跃的也会变得有顺序
!
#!/bin/bash
arr=(1 2 3 4 5)
#数组的初始化后面用括号

arr[1] = 12;
# 对数据元素进行赋值

${arr[i]}
#表示第一个数组元素的值

${arr[@]} 或者 ${arr[*]}
#表示数组中所有元素

echo ${arr[@]}
# 打印数组所有元素

${#arr[@]}
#求数组的长度

arr(${arr[@]} "AAA")
#在数组的后面插入值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值