欢迎光临散文网 会员登陆 & 注册

linux shell编程

2023-03-12 19:57 作者:芜湖小量化  | 我要投稿

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可以自行了解。

linux shell编程的评论 (共 条)

分享到微博请遵守国家法律