shell学习笔记

1.shell基础

1.1 基础知识
  • 单引号和双引号的区别:
    • 通过单引号定义变量,输出变量内容时单引号里面是什么就输出什么,即使内容中有变量和命令也会将它们原样输出;单引号中不能出现单引号,即使有转义符号转义了也不可以
    • 通过双引号定义变量,输出变量时引号里的变量及命令(要反引下)会经过解析后才输出该变量的内容,而不是将引号中的变量或命令原样输出;双引号中可以使用转义符号
  • 注释:shell中只有单行注释,无多行注释。如需要临时注释一段代码,后面需要取消注释,可以用花括号括起来作为一个函数,代码中没有调用此函数,这段代码就不会执行
1.2 shell脚本实例
#!/bin/bash
echo "Hello World !"
  • 说明:#!是一个约定标记,它告诉系统这个脚本需要什么解释器来执行
1.3 运行shell脚本的方式
  • 1.作为可执行程序
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

./test.sh表示在当前目录找 test.sh 文件

  • 2.作为解释器参数
# 此方式运行脚本,不需要在脚本的第一行指定解释器信息
/bin/sh test.sh
/bin/php test.php
  • 3.sh test.sh
1.4 echo的使用
# 显示换行
echo -e "ok! \n" #-e开始转义
echo "It is a test"
#OK!
#
#It is a test

# 显示不换行
echo -e "ok! \c" #-e开始转义 \c不换行
echo "It is a test" # OK! It is a test

# 显示结果定向至文件
echo "It is a test" > myfile

# 显示命令执行结果,命令需要用``反引号
echo `date`

2.shell变量

2.1 变量的命名规范
  • 变量名和‘=’之间不能有空格
  • 变量名可以包含数字、字符和下划线,但不能以数字开头(可以以下划线开头)
  • 变量名中间字符不能有空格
  • 不能使用标点符号
  • 不能使用bash中的关键字
2.2 取变量的值
  • 使用一个变量时,在变量名前加上$符号即可,变量名外面的花括号可选,可以加也可以不加
# 给变量赋值
your_name="qinjx"
# 取变量值并输出
echo $your_name
# 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,如:echo "I am good at ${skill}Script" => 若不加上{},那么系统则会当做:$skillScript
echo ${your_name}
2.3 环境变量
  • 作用:一般用于定义shell的运行环境,可以通过环境变量来确定登录用户名、命令路径、终端类型、登录目的等
  • 创建与删除

    • 创建临时的环境变量:可以在命令行中设置,但用户退出命令行时这些变量值就会丢失,设置方法有如下三种:

      • 1.export name=value
      • 2.name=value export name
      • 3.declare -x name=value
    • 创建永久的环境变量:可以在.bash_profile或者.bashrc文件中或在/etc/bashrc/etc/profile/etc/profile.d/中定义,实例:

      • 1.在/etc/profile文件中添加变量CLASSPATH【对所有用户生效(永久的)】
      
      # 1.打开 /etc/profile 文件并加入如下行:
      
      export CLASSPATH="my test classpath";
      
      # 2.保存文件后需要执行 source /etc/profile 才能马上生效,否则只能在下次重进此用户时才能生效
      
      
      • 2.在用户目录下的.bash_profile(/home/elaine/)文件中增加变量,方法同上【对单一用户生效(永久的)】
      • 说明:将环境变量保存至上述文件中,每次用户登录时这些变量值都会被初始化一次,若想要修改后马上生效,需要执行source /etc/profile,否则只能在下次重进此用户时才能生效
    • 删除环境变量:使用unset命令,可以直接在命令行中输入unset name
2.4 变量的说明
  • 已定义的变量可以重新被定义
  • 变量中需要加入命令:使用反引号即可,如下例:

     _filename=`ls`;
     echo $_filename;
    
    # 运行以上两句,将会将当前目录下的所有文件名与文件夹名称全部输出
    
  • 只读变量:用readonly关键字标记变量即可

  • 删除变量:unset即可删除变量,变量被删除后不能再次使用,且不能删除只读变量
  • shell的变量类型:运行shell时会同时存在三种变量
    • 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
    • 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量
    • shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

3.shell字符串与数组

3.1 字符串基础用法
# 拼接字符串
str="${_str}${_str1}";
echo "拼接字符串_str与_str1后的字符串为:$str";

# 获取字符串长度
echo "length(_str) = ${#_str}";

# 截取字符串
# 第一位从0开始哈
subStr=${_str:10:6};
echo "截取字符串_str从第11个字符开始的后6个字符为:$subStr";
3.2 数组基础用法
  • 数组声明:array_name(value1 value2...valuen)
  • 获取数组的值
    • 获取数组中某个元素:${array_name[0]}
    • 获取数组中所有元素:${array_name[*]} or ${array_name[@]
  • 获取数组长度:${#array_name[*]} or ${#array_name[@]}

4.shell参数传递

4.1 传递参数基础用法
# 传参方式,在执行脚本后带上参数,参数间用空格隔开
$ ./test.sh 111 222 333

# 取参方式,$n的格式获取,n为数字,1表示第一个参数,2表示第二个参数...,其中$0为执行的文件名
echo "执行的文件名:$0"; #./test.sh
echo "第一个参数:$1";  #111
echo "第一个参数:$2";  #222
echo "第一个参数:$3";  #333
4.2 特殊字符
字符说明
$*以单个字符获取所有的参数,” 1 1 2$3…”
$@ 获取所有的参数,”1""2”“$3”…
$#获取输入参数的个数
4.3 read的常用方式
  • 从终端输入显示的值并读取:read -p or echo -n
# echo -n指定提示符
echo -n "Enter your name:"
read name;
echo "hello,$name,we are friends now!";

# 用read -p来直接指定提示符
read -p "please Enter your name:" name;
echo "hello,my name is $name";

# read -p指定多个变量
read -p "Enter your name:" first middle last
echo "Checking data for $last, $middle, $first"
  • 隐藏从终端输入的值并读取
# 输入时不显示,如密码等
read -p "please Enter your password:" -s password;
echo "my password is $password";

5.shell基本运算符

5.1 关系运算符
运算符说明
-eq判断两个数是否相等,相等返回true
-ne判断两个数是否不相等,不相等返回true
-gt判断左边的数是否大于右边的数,是则返回true
-lt判断左边的数是否小于右边的数,是则返回true
-ge判断左边的数是否大于等于右边的数,是则返回true
-le判断左边的数是否小于等于右边的数,是则返回true
5.2 布尔运算符
运算符说明
非运算符,表达式为false则返回true,否则返回false
-o或运算符,有一个表达式为true则返回true
-a与运算符,两个表达式都为true才返回true
5.3 逻辑运算符
运算符说明
&&AND
`
5.4 字符串运算符
运算符说明
=判断两个字符串是否相等,相等返回true
!=判断两个字符串是否相等,相等返回false
-z判断字符串长度是否为0,为0返回true
-n判断字符串长度是否为0,不为0返回true
字符串本身判断字符串是否为空,不为空返回true,例:[$a]返回false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值