shell变量、函数和数组以及字符串的截取
一、变量
1.shell变量名
(1)可以由字母、数字、下划线等字符组成。但是第一个字符必须是字母或者下划线。
(2)若果变量中包含下划线(_)则要特别注意,$project_svn_$date.tar.gz 和 {$project_svn}_$date.tar.gz。第一个shell理解为$project是一个变量。
2.变量的赋值:
variable=value
note:赋值运算符前后不能有空格,否则会报错。
3.变量分类:
内部变量是为了shell编程的而设定的变量。
本地变量是在代码块或函数中定义的变量,切尽在定义的范围内有效
参数变量是调用shell脚本或执函数传递的时的变量
环境变量是为了系统内核、系统命令和用户命令提供运行环境而设定的变量
用户自定义变量即普通变量或者临时变量
3.1内部变量
PWD:表示当前的工作目录,其变量值等于PWD内部命令的输出。
[centos@s201 ~]$ echo $PWD /home/centos
RANDOM: 每次引用这个变量,将会生成一个均匀分布0-32676 范围内的随机整数
SCONDS:脚本已经运行的时间
PPID:当前进程的父进程的进程ID
$?:表示最近一次执行的命令或者shell脚本的出口状态
3.2环境变量:
EDITOR:
HOME:用户主目录
PATH:指定命令的检索路径
如何将/usr/local/mysql/bin添加到系统默认读取的PATH的变量中?
PATH=$PATH:/usr/local/mysql/bin
note:linux包含两个重要文件 /etc/profile $HOME/.bash_profile 每次系统登入都要读取这两个文件。
5.变量的引用和替换
假设variable是一个变量
$variable 或者 ${variable } 表示使用变量中储存的值用于替换变量本身
note:位于但用双引号中的变量可以替换,位于单引号中变量则不能进行替换。
二、函数
function 函数名()
{
action;
[returm 数值;]
}
具体说明:
1自定义函数既可以用带function 参数的函数名(),也可以直接用函数名()直接定义,而不带任何参数
2参数返回的时候可以显示的加return返回,如果不加,则将一最后一条命令的运行结果作为返回值。return 后跟数值,取值范围0-255
demo遍历某个目录所有文件
#!/bin/bash function traverse(){ for file in `ls $1` do if [ -d $1"/"$file ] then traverse $1"/"$file else echo $1"/"$file fi done } traverse "/home"
三、shell中的数组
(1)定义数组
arr1=(value1...value2)
如
arr1=(
value1
value2
value3
)
或者单独定义数组的各个分量
arr1[0]=value0
arr1[1]=value1
(3)读取数组
读取数组值的一般格式:
${arr1[index]}
使用@ *可以获取数组中的所有元素:
${arr[*]}
${arr[@]}
获取数组的长度
${#arr[*]}
${#arr[@]}
也可以获取数组中单个元素的长度
${#arr[index]}
[centos@s201 ~]$ arr1=( 1 2 3 4 5 6 7 ) [centos@s201 ~]$ echo ${arr1[1]} 2 [centos@s201 ~]$ echo ${arr1[*]} 1 2 3 4 5 6 7 [centos@s201 ~]$ echo ${arr1[@]} 1 2 3 4 5 6 7 [centos@s201 ~]$ echo ${#arr1[@]} 7 [centos@s201 ~]$ echo ${#arr1[*]} 7 [centos@s201 ~]$ echo ${#arr1[1]} 1
四、shell中字符串的截取
第一种方法:
从左向右截取最后一个string后的字符串
${variable##*string}
从左向右截取第一个string后字符串
${variable##*string}
从右向左截取最后一个string前的字符串
${variable%%string*}
从右向左截取第一个string前的字符串
${variable%string*}
[centos@s201 ~]$ echo ${a##*"i"} n [centos@s201 ~]$ echo ${a##*i} n [centos@s201 ~]$ echo ${a#*i} ngbin [centos@s201 ~]$ echo ${a%%i} wangqingbin [centos@s201 ~]$ echo ${a%%i*} wangq [centos@s201 ~]$ echo ${a%i*} wangqingb
第二种方法:
${变量:n1:n2} 截取变量n1开始的n2 个字符。第一位是0
[centos@s201 ~]$ echo ${a:2:4} ngqn
第三种方法:
ls -al | cut -d "." -f2
ls -al total 1508456 drwx------. 47 centos centos 8192 Apr 5 07:07 . drwxr-xr-x. 3 root root 20 Jul 16 2018 .. -rw-rw-r--. 1 centos centos 0 Jan 9 14:59 1 -rw-rw-r--. 1 centos centos 0 Jan 9 14:35 ]1 -rw-rw-r--. 1 centos centos 0 Jan 9 14:40 1] -rw-rw-r--. 1 centos centos 0 Jan 9 14:38 1]] -rwxrwxr-x. 1 centos centos 81 Jan 9 21:55 1.sh -rw-rw-r--. 1 centos centos 109 Oct 11 11:31 1.txt -rw-rw-r--. 1 centos centos 52839453 Jul 30 2018 2018-07-01.log
[centos@s201 ~]$ ls -al |cut -d "." -f2 total 1508456 47 centos centos 8192 Apr 5 07:07 3 root root 20 Jul 16 2018 1 centos centos 0 Jan 9 14:59 1 1 centos centos 0 Jan 9 14:35 ]1 1 centos centos 0 Jan 9 14:40 1] 1 centos centos 0 Jan 9 14:38 1]] 1 centos centos 81 Jan 9 21:55 1 1 centos centos 109 Oct 11 11:31 1 1 centos centos 52839453 Jul 30 2018 2018-07-01
[centos@s201 ~]$ ls -al |cut -d "." -f1 total 1508456 drwx------ drwxr-xr-x -rw-rw-r-- -rw-rw-r-- -rw-rw-r-- -rw-rw-r-- -rwxrwxr-x -rw-rw-r-- -rw-rw-r--
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· 深度对比:PostgreSQL 和 SQL Server 在统计信息维护中的关键差异