shell - 变量

变量

1 . 自定义变量
(1) 数字

#!/bin/bash
#not i = 1
i=1
echo $i


i=$[ $i+1 ]
echo $i
  • 变量通过是否有加双引号来区分字符串和数字
  • 变量赋值和等号中间不能有空格,否则无法解析
  • 变量名字中间不能有空格, 可以使用下划线
    (2) 变量进行运算
  • 使用$[]将运算后的结果直接赋值给变量
  • 里面基本支持所有常见的算术运算符
  1. 字符串
    (1) 赋值
your_name="qinjx"


#推荐第二种写法,用来区分变量
echo "$your_name"
echo "${your_name}"

(2) 拼接

  • 无论是变量和字符串的拼接,还是和另外一个变量的拼接,都是直接拼接即可
  • 双引号里面可以使用$来进行引用变量
#!/bin/bash


name="wenguang"
age=24
fullname="qin"$name
echo "name=$name,fullname=$fullname,age=$age"
  1. 限定变量
    (1) readonly 变量名
  • 只能在赋初始值的时候改变
    (2) 语法
#!/bin/bash
readonly file_name="/hom/wenguang"
file_name="home"
  1. 命令替换
    (1) 将命令的执行结果赋值给变量
val=`common`
val=$(common)

(2) ex

#!/bin/bash


today=$(date +%y%m%d)
ls ${HOME} > log.${today}
f1399b48-4a2a-4357-8d0d-39a34de2e9c1.png
  1. 变量的有效范围
  • 环境变量 = 全局变量
  • 自定义变量 = 本shell程序

交互变量

  1. 命令行参数
    (1) 格式
  • $0 程序名字
  • $1第一个参数
  • $2第二个参数
  • $3三个参数
  • $9第九个参数
    (2) 参数以空格来区分的, 若一个参数里面有空格, 需要通过""来引用
#!/bin/bash
#参数中包括空格处理
if [ $# -eq 1 ]; then
  echo "$0"
  echo "$1"
fi

(3) 使用

  • 在test里面表示字符串时候需要加上双引号
if [  -n "$1" ]; then
在case里面
一般使用不需要加上大括号

  1. 其他内置变量
  • $# : 命令行参数的个数
  • $@: 命令行上的所有参数,(各自是各自的,这个常用)
  • #
  • 默认的为0, $0为变量名称
#!/bin/bash
#统计参数的个数
echo "there are $# parameter"
4ed92ecb-918e-41b1-82f7-66a4073633bc.png

(3) #@: 遍历输入的所有参数

#!/bin/bash
#遍历输入的参数
number=0;
​

for param in $@
do
  number=$[ number+1 ]
  echo "$number  $param"  
done
d5b45c87-f0cd-48fd-b6de-6e2e6d1d03e7.png
  1. shift移动变量
    (1) 作用
  • 把$1删除掉
  • 把1
  • 删除以后不可恢复
  1. 处理单独选项
    (1) 直接使用case表示, 然后使用shift移动即可
#处理不同的参数


while [ -n "$1" ]
do
  case "$1" in
  "-a") echo "found -a option";;
  "-b") echo "founf -b option";;
  "-c") echo "founf -c option";;
  "-d") echo "founf -d option";;
  *)  echo "no found option";;
  esac
  shift
done

  • [ ]里面的变量需要加上双引号
  • case中的变量需要加上双引号


    0d3de537-cdd0-4e1b-9b6b-dcd287e7f7af.png
  1. getopt
    (1) 作用
  • 定义了命令行有效的选项字母,
  • 还定义了哪些选项字母需要参数值
  • 可以用来分开多个选项, 以及跟在选项后面的参数
    (2) 使用
  • 哪一个参数后面有参数, 该参数后面加上冒号
  • 选项和参数是写到一起的, 不空开; 后面加上自己输入的例子
  • 不过option后面只能加上一个参数


    0afe47f5-2cf8-4861-b1a9-871cefedbacc.png
  • 假设该值有参数却没有输入参数, 就会直接输出 --


    c76b88d9-db75-44db-9a81-ec707a5f4282.png
#!/bin/bash
#处理不同的参数
#-a -b arg1 -c -d -- arg2 
set -- $(getopt -q ab:cd "$@")


while [ -n "$1" ]
do
  case "$1" in
  "-a") echo "found -a option";;
  #这里的值
  -b)   param=$2
        echo "founf -b option with parameter $param"
        shift ;;
  "-c") echo "founf -c option";;
  "-d") echo "founf -d option";;
  "--") shift
        break;;
  *)  echo "$1 no found option";;
  esac
  shift
done


count=1
for param in "$@"
do
  echo "Parameter #$count: $param"
  count=$[ $count + 1 ]
done

8689641e-61ea-4907-80bc-778e931801b4.png
  1. 参数标准化
5be672a4-ee3c-46e4-8f9f-7af9a6652c78.png

你可能感兴趣的:(shell - 变量)