[Bash Programming] Variable

变量类型:

数据存储格式、存储空间大小、参与运算种类;

字符型

数值型:

整型

浮点型

强类型:定义变量时必须指定类型、参与运算必须符合类型要求;调用未声明变量会产生错误;

弱类型:无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用;

bash

bash中的变量的种类:

根据变量的生效范围等标准:

本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效;

环境变量:生效范围为当前shell进程及其子进程;

局部变量:生效范围为当前shell进程中某代码片断(通常指函数);

位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数;

特殊变量:$?, $0, $*, [email protected], $#

本地变量:

变量赋值:name=‘value‘

可以使用引用:

value:

(1) 可以是直接字串; name="username"

(2) 变量引用:name="$username"

(3) 命令引用:name=`COMMAND`, name=$(COMMAND)

变量引用:${name}, $name

"":弱引用,其中的变量引用会被替换为变量值;

‘‘:强引用,其中的变量引用不会被替换为变量值,而保持原字符串;

显示已定义的所有变量

set

销毁变量:

unset name

环境变量:

变量声明、赋值:

export name=VALUE

declare -x name=VALUE

变量引用:$name, ${name}

显示所有环境变量:

export

env

printenv

销毁:

unset name

bash有许多内建的环境变量:PATH, SHELL, UID, HISTSIZE, HOME, PWD, OLD, HISTFILE, PS1

变量命名法则:

1、不能使程序中的保留字:例如if, for;

2、只能使用数字、字母及下划线,且不能以数字开头;

3、见名知义,

只读变量:

readonly name

declare -r name

位置变量:

在脚本代码中调用通过命令行传递给脚本的参数;

$1, $2, ...:对应调用第1、第2等参数;

shift [n]

$0: 命令本身;

$*: 传递给脚本的所有参数;

[email protected]: 传递给脚本的所有参数;

$#: 传递给脚本的参数的个数;

示例:判断给出的文件的行数

#!/bin/bash

linecount="$(wc -l $1| cut -d‘ ‘ -f1)"

echo "$1 has $linecount lines."

bash中的算术运算

+, -, *, /, %, **

实现算术运算:

(1) let var=算术表达式

(2) var=$[算术表达式]

(3) var=$((算术表达式))

(4) var=$(expr arg1 arg2 arg3 ...)

乘法符号有些场景中需要转义;

bash有内建的随机数生成器:$RANDOM

增强型赋值:

+=, -=, *=, /=, %=

let varOPERvalue

例如:let count+=1

自增,自减:

let var+=1

let var++

let var-=1

let var--

练习1:写一个脚本

计算/etc/passwd文件中的第10个用户和第20用户的ID之和;

#!/bin/bash

userid1=$(head -n 10 /etc/passwd | tail -n 1 | cut -d: -f3)

userid2=$(head -n 20 /etc/passwd | tail -n 1 | cut -d: -f3)

useridsum=$[$userid1+$userid2]

echo "uid sum: $useridsum"

练习2:写一个脚本

传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和;

#!/bin/bash

spaceline1=$(grep "^[[:space:]]*$" $1 | wc -l)

spaceline2=$(grep "^[[:space:]]*$" $2 | wc -l)

echo "The sum of space line: $[$spaceline1+$spaceline2]"

练习3:统计/etc, /var, /usr目录共有多少个一级子目录和文件;

时间: 2024-11-13 14:01:39

[Bash Programming] Variable的相关文章

[Bash Programming] loop

CONDITION: bash命令: 用命令的执行状态结果: 成功:true 失败:flase 成功或失败的意义:取决于用到的命令: 单分支: if CONDITION; then if-true fi 双分支: if CONDITION; then if-true else if-false fi 多分支: if CONDITION1; then if-true elif CONDITION2; then if-ture elif CONDITION3; then if-ture ... es

Bash For Loop Examples

How do I use bash for loop to repeat certain task under Linux / UNIX operating system? How do I set infinite loops using for statement? How do I use three-parameter for loop control expression? A 'for loop' is a bash programming language statement wh

The trap of Bash trap

Can you spot the problem with the following Bash script? resource_created="false" function cleanup() { echo "Exit code: $?" if [[ $resource_created == "true" ]]; then echo "Clean up resource" else echo "Nothing

Codeforces Gym 100513M M. Variable Shadowing 暴力

M. Variable Shadowing Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/problem/M Description In computer programming, variable shadowing occurs when a variable declared within a certain scope has the same name as a variab

Command Line Skills

Part 1: Command Line Interface(CLI) The Command Line Interface (CLI), is a text-based interface to the computer, where the user types in a command and the computer then executes it. The CLI environment is provided by an application on the computer kn

Pass command line arguments to Gnuplot script

Gnuplot is a light-weight and easy to use  scientific plotting tool. Its has enough functionalities to deal with most of my demands on visualizing experimental data. If heavy computation is needed, GNU Octave can be used, of which the plotting backen

UNIX/Linux 系统管理技术手册阅读(十二)

2016.11.17 Variables and quoting Variable names are unmarked in assignments but prefixed with a dollar sign when their values are referenced. For example: $ etcdir='/etc' $ echo $etcdir /etc Do not put spaces around the = symbol or the shell will mis

Linux/Unix shell 监控Oracle监听器(monitor listener)

使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linux 下使用 shell 脚本来监控 Oracle 监听器. Linux Shell的相关参考:        Linux/Unix shell 脚本中调用SQL,RMAN脚本        Linux/Unix shell sql 之间传递变量        Linux/Unix shell 调用

中小型数据库 RMAN CATALOG 备份恢复方案(二)

中小型数据库呈现的是数据库并发少,数据库容量小,版本功能受限以及N多单实例等特点.尽管如此,数据库的损失程度也会存在零丢失的情形.企业不愿意花太多的钱又要保证数据库的可靠稳定,可是苦煞了我这些搞DB的.接上一篇文章,中小型数据库 RMAN CATALOG 备份恢复方案(一),我们继续来给出基于中小型数据库的恢复的脚本与其部署. 1.RMAN还原shell脚本 [python] view plain copy print? --下面的shell脚本用于实现数据库的自动还原,还原成功后,数据库被关闭