shell简介
- 什么是shell?
- 是一种服务器端的脚本语言,shell编程就是将shell命令保存到文件(shell脚本)中。
- shell类型?
- ash、csh、ksh、bash等
- 查看当前使用的shell:echo $SHELL
- 查看系统可以的shell:cat /etc/shells
- shell脚本
- 指定shell解析器执行指定的shell脚本:
- 创建1.sh文件,添加内容echo 'Hello world!'
- 执行:bash 1.sh,1.sh文件不需要可执行权限
- 自解析shell脚本:
- 创建1.sh文件,在开头添加内容#!/bin/bash,指定shell解析器
- 添加可执行权限:chmod +x 1.sh
- 执行:./1.sh
- 说明:
- shell脚本中的#表示注释,开头的#!表示指定解析环境
- 单独的自解析的脚本需要添加可执行权限
变量定义
- 变量定义:name='xxx',=两边不能有空格
- 打印变量:echo $name 或 echo ${name}
- 销毁变量:unset name,销毁后就不能再使用了
- 定义常量:readonly name='xxx',修改常量会保存
变量分类
- 本地变量:只适合于当前脚本的变量
- 环境变量:通常整个系统环境都能使用,一般都是纯大写的
- 查看系统环境变量:env
- 查看指定环境变量:echo $PATH
- 若想让一个应用程序任意位置都可使用,将该程序所在目录添加到PATH环境变量:
- 临时:export PATH=$PATH:新目录
- 永久:
- 系统:/etc/profile
- 用户:~/.profile、~/.bashrc、~/.bash_profile
- 将临时的export语句放在脚本末尾即可
- 让配置文件立即生效:source ~/.profile
- 位置变量:
- $0:表示脚本名字
- $1~$9:表示传递给脚本的参数
- 特殊变量:
- $#:传递给脚本的参数个数
- $*:传递给脚本的所有参数
- $?:上次命令执行的结果,0表示正确,其他值表示对于的错误
数值类型
- 定义变量或赋值,默认所有的值都是普通的字符,即使时数字
- 若想让变量作为数值进行运算,前面需要加上let
- 示例:
#! /bin/bash
a=1
let a=a+2
echo $a
字符串类型
- 单引号:单引号中的字符都会保持原样,变量不会被解析
- 双引号:双引号中的变量会解析,特殊字符:$、"、\、`
- 反引号:其中的内容会作为命令执行,如
echo `date`
- 长度计算:echo ${#name}
- 子串提取:echo ${name:2:3},从下标为2开始提取3个字符
数组类型
- 定义:a=(1 2 3)
- 成员访问:echo ${a[1]}
- 所有成员:echo ${a[*]}
- 长度计算:echo ${#a[@]}
各种运算
- test:测试真假
#!/bin/bash
if test 1 -lt 2;then
echo 'ok'
fi
if [ 1 -lt 2 ];then
echo 'ok'
fi
- 数值大小比较
符号 说明
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于
- 字符串比较
符号 说明
= 相等
!= 不等
-z 字符串长度是否为0
-n 字符串长度是否不为0
- 文件判断
符号 说明
-f 普通文件
-d 目录文件
-c 字符设备
-b 块设备
-r 是否可读
-w 是否可写
-x 是否可执行
-s 文件是否存在,并且至少有一个字符
- 逻辑运算
- -a:逻辑与(and),也可以使用&&来代替
- -o:逻辑或(or),也可以使用||来代替
- !:逻辑非(not)
#!/bin/bash
if [ 1 -lt 3 -a 2 -lt 3 ];then
echo 'ok'
fi
if [ 1 -lt 3 ] && [ 2 -lt 3 ];then
echo 'ok'
fi
if [ ! 1 -gt 3 ];then
echo 'ok'
fi
分之结构
- if-elif-else-fi
#! /bin/bash
if [ 4 -lt 3 ];then
echo '111'
elif [ 2 -gt 3 ];then
echo '222'
else
echo '333'
fi
- case
#!/bin/bash
# 获取用户输入,-p指定打印信息,输入内容保存到ch中
read -p 'please input a charactor:' ch
case $ch in
[a-z])
echo 'alpha'
;;
[0-9])
echo 'numberic'
;;
*)
echo 'others'
;;
esac
循环结构
- for-in 及 for
#! /bin/bash
a=(1 2 3)
#for x in ${a[*]}
#for x in 1 2 3
#for x in /etc/*
#for x in {1..10}
for x in `seq 1 10`
do
echo $x
done
for ((i=0;i<${#a[@]};i++))
do
echo ${a[$i]}
done
for i in {1..100}
do
let j+=$i
done
echo $j
- `while`:条件成立执行循环
```shell
#! /bin/bash
i=1
while [ $i -le 10 ]
do
echo $i
#((i++))
let i++
done
- until:条件成立结束循环
#! /bin/bash
i=1
until [ $i -gt 10 ]
do
echo $i
((i++))
done
- break、continue自行学习
函数使用
- 示例:
#! /bin/bash
demo()
{
echo 'in demo func'
}
demo
args()
{
第一个参数
echo $1
第二个参数
echo $2
参数个数
echo $#
所有参数
echo $*
}
args 11 22 33
shell语法及认知
最新推荐文章于 2025-05-21 08:30:00 发布