shell学习

一、引号

  1. 双引号:"",会把引号的内容当成整体,允许通过$符号引用其他变量值
  2. 单引号:’’,会把银行的内容看作整体,禁止引用其他变量的值,shell中特殊符号都会被视为普通字符
  3. 反撇号:``,和$()一样,引号或括号里的命令会优先执行,反撇号中不能出现嵌套。
echo "hello $name"
echo 'hello $name'
echo $(ls)
echo `ls`

二、小括号与中括号的区别

$(命令)
${变量名}

三、执行方法

  • 获得执行权限,./hello.sh运行
  • 使用命令解释器运行,
    bash hello.sh
    sh hello.sh
    bash -x hello.sh 查看执行过程 调试用
  • 使用source命令读取脚本文件,执行文件里的代码
    source hello.sh
    zys@:~/workspace/project/shell$ cat lesson1.sh
    #!/bin/bash
    fun1()
    {
       echo "aaa"
    }
    zys@:~/workspace/project/shell$ source lesson1.sh
    zys@:~/workspace/project/shell$ fun1
    aaa
    
    

四、变量

命名要求

  • 变量名区分大小写
  • 变量名不能以数字开头
  • 变量名不能含有符号
  • 变量名两边不能有空格

定义方式

  • 直接给变量赋值A=123456,echo {A:2:3},从A中第二个字符开始截取三个字符
  • 命令的执行结果赋值给变量,B=date +%F
  • 从终端读取,read C,echo $C,等待从终端输入数据,然后赋值给C
  • 从文件获取,read ip mask < ip.txt,echo $ip,echo $mask,ip.txt中是192.168.1.1 25.25.25.0,中间以空格隔开

变量的分类

  • 本地变量
    当前用户自定义的变量,当前进程中有效,其他进程及当前进程的子进程无效。

  • 环境变量
    当前进程有效,并且能被子进程调用
    env:查看当前用户的环境变量
    set:设置当前用户的所有变量,临时变量与环境变量
    export:变量名=变量值 或者 变量名

     ```bash
     #临时将一个本地变量变成环境变量
     export A=hello 
     #查询
     env | grep ^A
     #永久生效环境变量
     vim /etc/profile 或者 ~/.bashrc
     export A=hello
     或者
     A=hello
     export A
     	
     例如:系统中有一个变量PATH
     export PATH=/usr/local/mysql/bin:$PATH
     ```
    
  • 全局变量
    全局所有用户和程序都可以调用,且继承,新建的用户也默认可以调用。
    $HOME/.bashrc 当前用户的bash信息,用户登录时读取
    $HOME/.bash_profile 当前用户的环境变量,用户登录时读取
    $HOME/.bash_logout 当前用户退出当前shell时最后读取
    /etc/bashrc 全局的bash信息,所有用户都生效
    /etc/profile 全局的环境变量信息
    $HOME/.bash_history 用户的历史命令
    说明; 以上文件修改后,都需要重新source让其生效或者退出重新登录

  • 系统变量

有道云笔记

#!/bin/bash

echo `date`

A=world
echo $A
echo ${A}

unset A
echo $A

echo "shell name:"$0

array=(aa "aa" 11 22 33 66)
echo ${array[0]}
echo ${array[1]}
echo ${#array[*]}
echo ${!array[@]}
echo ${array[@]:1:2}

#!/bin/bash

A=123456
B=${A:2:2}
echo $B


C=`date`
echo $C

read -p "Input you name:" name
echo $name

#!/bin/bash
root=`pwd`
echo $root

#使用read命令读取文件内行内容 自动以空格隔断
read_a()
{
pwd
read ip mask < config.txt
echo $ip
echo $mask
}

#for循环取出文件每一行 但是行内不能有空格
read_for()
{
for line in $(cat tab.txt)
do
        flag=${line:0:1}
        if [ $flag != '#' ];then
                echo $line
        fi
done
}


#获取tab1.txt 取出路径和状态
read_while()
{
while read -r line
do
        #echo while:$line
        handle_line $line
done < tab1.txt
}

handle_line()
{
        local dir=$1
        local sta=$2
        echo dir:$dir
        echo sta:$sta
        echo "--------"
}

#read_a
#read_for
read_while

获取函数返回值

function test()
{
    echo abc
}
 
ret=`test`
echo 1=$ret
 
ret=$(test)
echo 2=$ret
#!/bin/bash

fun1()
{
	echo "111"
	return 0
}

fun2()
{
	echo "222"
	return 1
}

test()
{
	echo "tt=$i"
}

main()
{
	local res=0
	#i是局部 test函数还可以访问
	local i=0
	for (( i=0;i<3;i++  ));do
		fun2
		res=$?
		if [ $res == 0 ];then
			echo "res=$res"
			break
		fi
	done
	echo "i=$i"
	test
}

main

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值