### Shell Scripting学习笔记 #### 一、基本概念与语法 **1.1 变量类型** 在Shell脚本中,所有的变量都是字符串类型。这意味着无论是整数还是浮点数,都将以字符串的形式存储。 **1.2 变量命名规则** 变量名必须以字母或下划线开头,并且可以由字母、数字和下划线组成。示例: ``` valid_var Invalid_Var1 ``` **1.3 变量声明** - **`declare` 或 `typeset`**: 可以用来声明变量。 - `-a`: 定义索引数组变量。 - `-A`: 定义关联数组变量。 - `-f`: 只使用函数名称。 - `-i`: 将变量视为整数。 - `-l`: 将所有大写字母转换为小写。 - `-r`: 将名字设置为只读。 - `-t`: 为每个名字提供跟踪属性。 - `-u`: 将所有小写字母转换为大写。 - `-x`: 将变量导出到子命令的环境中。 示例: ```bash # 定义一个整数变量 declare -i my_integer=42 # 定义一个索引数组 declare -a my_array=('apple' 'banana') # 定义一个关联数组 declare -A my_assoc_array=(["fruit"]="apple" ["vegetable"]="carrot") ``` **1.4 变量赋值** - `var=value`: 赋值时,等号两边不能有空格。 - `var:=value`: 只在变量为空或未定义时赋值。 示例: ```bash my_var="hello" echo $my_var # 输出: hello my_var:=world echo $my_var # 输出: hello (不会被重新赋值) ``` **1.5 变量定义** - 在声明时定义:`declare -i var=1`。 - 在首次赋值时定义:`var=1`。 **1.6 变量取消定义** 使用 `unset` 命令取消定义变量。 示例: ```bash unset my_var ``` **1.7 引用变量** - `$var`: 不推荐使用。 - `${var}`: 推荐使用,以避免意外扩展。 示例: ```bash my_var="hello world" echo "$my_var" # 输出: hello world echo $my_var # 输出: hello ``` #### 二、函数定义与调用 **2.1 函数定义** 使用 `function` 关键字定义函数。 示例: ```bash function greet { echo "Hello, $1!" } ``` **2.2 参数** - `$@` 或 `$*`: 所有参数。 - `$#`: 参数数量。 - `$?`: 上一个命令的退出状态。 - `$0`: 脚本名称。 - `$1`, `$2`, ...: 传递给脚本或函数的参数。 示例: ```bash function print_args { echo "Number of arguments: $#" echo "First argument: $1" echo "All arguments: $@" } print_args "one" "two" "three" ``` **2.3 返回值** 返回值默认为整数,范围为 [0, 255]。 示例: ```bash function return_value { return 1 } return_value echo $? # 输出: 1 ``` **2.4 函数递归** 函数可以调用自身实现递归逻辑。 注意:在递归函数中声明局部变量时使用 `local` 命令,以避免变量覆盖。 #### 三、引用与字符串操作 **3.1 引用** - 单引号 `'...'`: 字符串内的变量不会被展开。 - 双引号 `"..."`: 字符串内的变量会被展开为其值。 示例: ```bash my_var="hello" echo 'Variable value: $my_var' # 输出: Variable value: $my_var echo "Variable value: $my_var" # 输出: Variable value: hello ``` **3.2 字符串操作** - 长度: `${#var}` - 分割: `${var:start_index}`, `${var:start_index:length}` - 删除匹配: `${var#pattern}`, `${var##pattern}`, `${var%pattern}`, `${var%%pattern}` - 替换: `${var/pattern/replacement}`, `${var//pattern/replacement}` 示例: ```bash my_string="hello world" echo "${#my_string}" # 输出: 11 echo "${my_string:0:5}" # 输出: hello echo "${my_string#h}" # 输出: ello world echo "${my_string##he}" # 输出: llo world echo "${my_string%ld}" # 输出: hello wor echo "${my_string%%lo wo*}" # 输出: hel echo "${my_string/world/universe}" # 输出: hello universe echo "${my_string//o/_}" # 输出: hell_ w_rld ``` #### 四、数学运算 **4.1 内置命令** - `declare`: 使用 `-i` 选项声明整数变量并进行运算。 - `let`: 直接进行数学运算。 - `$(())`: 使用圆括号进行表达式计算。 示例: ```bash declare -i n=1 let n=n+1 echo $n # 输出: 2 n=$(($n+1)) echo $n # 输出: 3 ``` **4.2 外部工具** - `bc`: 用于复杂的数学运算。 - `expr`: 进行基本的算术、关系和逻辑表达式的解析。 示例: ```bash n=$(echo "$n + 1" | bc) echo $n # 输出: 4 n=$(expr $n + 1) echo $n # 输出: 5 ``` #### 五、输出表达式 **5.1 `echo` 命令** 使用 `echo` 命令输出文本和变量。 示例: ```bash echo "Hello World" ``` **5.2 `printf` 命令** 使用 `printf` 命令格式化输出。 示例: ```bash printf "%s %d\n" "Hello" 42 printf "-vvar" "%s %d" "Hello" 42 ``` **5.3 数组** - **索引数组**: 使用 `declare -a` 创建。 - **关联数组**: 使用 `declare -A` 创建。 示例: ```bash declare -a fruits=("apple" "banana" "cherry") declare -A fruit_colors=(["apple"]="red" ["banana"]="yellow" ["cherry"]="dark red") ``` 通过以上内容的学习,我们可以更好地理解Shell脚本的基本语法和常用操作。这些知识点对于编写高效、可靠的Shell脚本至关重要。



















剩余8页未读,继续阅读


- 粉丝: 29
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 项目管理-采购管理.ppt
- 综合布线课程设计.pptx
- 国内医药电子商务营销的现状分析教材.pptx
- 物业新项目管理方案.doc
- 清华-谭浩强-C语言程序设计视频教程-第8章.ppt
- 通信工程工程量清单计价与投标快速报价实务全书.doc
- 云计算导论第6章.ppt
- 煤炭安全质量标准化精细化管理与信息化.ppt
- 电子商务培训班主持词.docx
- 基因工程习题答案.doc
- Python 实现数据结构的方法:助力课后作业与课程大作业
- 2023年最全的事业单位考试计算机基础知识试题.doc
- 信息化规划案例.doc
- 最新国家开放大学电大专科《信息化管理与运作》判断填空题题库及答案(试卷号:2499).docx
- 企业信息化教研中心实训方案.doc
- 施工现场安全管理网络及安全技术措施有用.doc


