变量
1 . 自定义变量
(1) 数字
#!/bin/bash
#not i = 1
i=1
echo $i
i=$[ $i+1 ]
echo $i
- 变量通过是否有加双引号来区分字符串和数字
- 变量赋值和等号中间不能有空格,否则无法解析
- 变量名字中间不能有空格, 可以使用下划线
(2) 变量进行运算 - 使用$[]将运算后的结果直接赋值给变量
- 里面基本支持所有常见的算术运算符
- 字符串
(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) readonly 变量名
- 只能在赋初始值的时候改变
(2) 语法
#!/bin/bash
readonly file_name="/hom/wenguang"
file_name="home"
![](https://img.haomeiwen.com/i14389752/5b7eac2cf6d4ba38.png)
- 命令替换
(1) 将命令的执行结果赋值给变量
val=`common`
val=$(common)
(2) ex
#!/bin/bash
today=$(date +%y%m%d)
ls ${HOME} > log.${today}
![](https://img.haomeiwen.com/i14389752/d050fa0297e34406.png)
- 变量的有效范围
- 环境变量 = 全局变量
- 自定义变量 = 本shell程序
交互变量
- 命令行参数
(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里面
一般使用不需要加上大括号
- 其他内置变量
- $# : 命令行参数的个数
- $@: 命令行上的所有参数,(各自是各自的,这个常用)
-
#
- 默认的为0, $0为变量名称
#!/bin/bash
#统计参数的个数
echo "there are $# parameter"
![](https://img.haomeiwen.com/i14389752/a879af00589a016f.png)
(3) #@: 遍历输入的所有参数
#!/bin/bash
#遍历输入的参数
number=0;
for param in $@
do
number=$[ number+1 ]
echo "$number $param"
done
![](https://img.haomeiwen.com/i14389752/72db834ba15427eb.png)
- shift移动变量
(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
- 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
![](https://img.haomeiwen.com/i14389752/14855053fb5f294f.png)
- 参数标准化
![](https://img.haomeiwen.com/i14389752/e2317ad70656194c.png)
网友评论