linux shell编程
shell是一个命令行解释器,负责把用户的命令解释成linux内核能够识别的命令,传递给内核执行
内核将执行后的执行返回给shell,shell再将执行结果显示出来
bash是比较常用的shell程序
shell脚本的hello world
echo hello world 使用命令输出hello world
nano hello.sh 创建hello.sh文件
#!/bin/bash 写入内容 #!指定该脚本的解释器 /bin/bash 解释器的绝对路径
echo hello world
sudo chmod +x hello.sh 为文件添加可执行权限
./hello.sh 执行hello.sh

变量的声明
给x赋值并且打印:
x=test
echo $x 此处$操作符是对变量的引用
指定变量的类型 常用命令 typeset / declare
declare参数:
-i 定义一个整数类型的变量
-a 定义一个数组类型的变量
-f 定义一个函数类型的变量
-r 定义一个只读变量
定义整数类型
declare -i x x=90
echo $x
定义只读类型
declare -r x x=test
x=test2 由于x为只读变量,会提示无法修改
readonly x=test 同样可以定义x为只读变量
declare -i x x=100
unset x 可以实现x变量的销毁
变量可以使用关键词之外的字符串作为变量名 但是不可以使用数字开头
变量赋值
1.使用=符号复制
2.read 变量名 变量可以是用户已经定义的,也可以是为定义的 例如read x 之后等待用户输入,回车结束输入,赋值变量
read x
study life best life 此处是用户输入内容
echo $x
返回-----------
study life best life
变量的引用
1.$x
2.${x}world 变量之后还有字符串的引用 会自动拼接后面的字符串
3."${x}" 一般用于含有空格的引用
变量分类
内部变量,环境变量,参数变量
export 查看环境变量
echo $PATH 输出path环境变量的值
export PATH = ~/lala/test: $PATH 追加新路径~/lala/test到PATH
shell中的引号
定义一个变量并赋值含有空格的字符串
x = "hello world"
echo $x
单双引号的区别
双引号的能够正常输出变量值
x = world
echo "hello ${x}" 输出 hello world
echo 'hello ${x}' 输出 hello ${x}
反引号`可以将shell命令的执行结果作为参数赋给某个变量,达到命令替换的效果
rd=`ls`|echo $rd
返回--------------------
公共的 模板 视频 图片 文档 下载 音乐 桌面 pycharm PycharmProjects snap
同样的使用$()也可以实现命令的替换
使用反引号传递信息
rm `ls|grep hello.sh` 删除ls列表中的hello.sh文件
变量的间接引用 使用!操作符
x=science
y=x
echo $y 输出结果 x
echo ${!y} 输出结果science
使用间接引用的时候需要注意特殊字符的处理
命令别名(对很长的命令把指令替换 alias)
alias long="ls -l | grep pycharm" 命令别名
long
返回----------------------
drwxr-xr-x 8 lala lala 4096 1月 20 1970 pycharm
unalias long 销毁别名

加减运算
x=1
y=3
i=$(($y-$x))
echo $i 输出结果2
取商取余 / %
i=$(($y / $x))
自增,自减运算
$(x++) $(++x) $(x--) $(--x)
位运算(对二进制数据,进行测试,移位,抽取等)
x=1 00000001 取反 11111110
# 计算机中 二进制以补码格式存储于内存:十进制数是以二进制形式进行逻辑运算的。二进制中为了区分正负数,设定了符号位。
# 正因为符号位的存在。计算机内存中存放二进制时是以补码的格式存储。
# 即计算机中所有的二进制都是补码形式存在。那么对二进制取反操作是对其补码进行取反操作。
# 计算机中 所有的负数以其补码形式表示。
# 按位取反:对二进制补码进行取反。(0转1,1转0)。
# 原码:在数值前面增加一位符号位,0表示正数,1表示负数。
# 反码:正数的反码与原码相同;负数的反码对其原码逐位取反(符号位除外)。
# 补码:正数的补码与其原码相同;负数的补码是在其反码的末位+1。
# 按位取反:~X = -(X+1)
# 1.十进制 → 2.二进制原码 → 3.二进制补码 → 4.按位取反→ 5.二进制原码 → 6.十进制
# eg:6
# 000000110 11111001 11111000 = -7
# eg:-7
# 11111000 00000111 00000110 = 6
x=1 移位 x=00000010 移位后=2
echo $((x<<1))
x=1 y=2 与运算 x=00000001 y=00000010 按位与时 0与0=0 1与0=0 1与1=1 x&y=00000000=0
echo $((x&y))
x=1 y=2 或运算 x=00000001 y=00000010 按位或时 0或0=0 1或0=1 1或1=1 x|y=00000011=3
echo $((x|y))
x=1 y=2 异或运算 x=00000001 y=00000010 按位异或 0或0=0 1或0=1 1或1=0 x^y=00000011=3
逻辑运算符
-a 与 -o 或 !非 && 与与(同真) ||或或(或真)
运算符优先级(查表)
let 命令进行算术运算
x=10
y=20
let z= $x + $y

shell 支持三种条件测试语法
test condition
[condition]
[[condition]]
文件测试/字符串测试/整数值测试
if语句标准语法
if [];then
********
elif[];then
********
else
********
fi shell中的f
case语句语法
case "变量名" in
“var1”)
语句
;;
“var2”)
语句
;;
“var3”)
语句
;;
*)
语句
;;
esac
var1~var3为匹配条件,如
在条件可以使用正则匹配
for/while/until/
for var in list
do
循环语句
done
continue和break语句
nano continue
文件 continue.sh
#!/bin/bash
for var in 1 2 3
do
if [ "$var" -eq
then
fi
echo $va
done
./continue.sh

定义数组的几种方式
1.直接定义
a1=(1 2 3 4 5)
2.声明数组后定义
declare -a a2
a2=("a" "b" "c" "d" "e")
3.a3=( 可以手动回车输入数组中每个元素
>1
>2
>3
>4
>5
>)
4.把包含空格的字符串直接转化为数组
data="a b c d e"
a4=($data)
5.使用索引的方法
a5=([0]=1 [1]=2 [2]=3 [3]=4 [4]=5)
使用unset可以销毁数组和数组索引值
unset a1[4] 销毁数组中第4个元素
获取数组的长度
${#array[@]}
${#array[*]}
数组切片
${array[@]:m:n}
数组替换
${array[@]/from/to} from数组中原来的字符串 to替换后的字符串
函数
function 函数名()
{
函数语句
return return返回值(可选)
}
文本处理
格式化输出
\b 退格
\r 代替enter
\t 水平tab键
\v 垂直tab键
\xNN 转换数字为字符
%ns 输出n个字符
%ni 输出n个整数字符
%N.nf 输出小数 保留n位小数
printf "%s\n" 1 2 3 4 单个字符换行输出1234
另外常用的处理文本命令 sed awk可以自行了解。