Compare commits

...

3 Commits

Author SHA1 Message Date
flykhan cdd2f13b5b gitignore规则 2023-08-14 15:53:25 +08:00
flykhan 2efc15795a 更新自己编写vim规则 2023-08-14 15:53:04 +08:00
flykhan b8e3fc0167 自己编写vim规则 2023-08-14 15:44:36 +08:00
23 changed files with 424 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.vscode
*/test

54
day1/README.md Normal file
View File

@ -0,0 +1,54 @@
在 Bash 脚本中,圆括号 `()` 和花括号 `{}` 有不同的用途和行为。
1. 圆括号 `()`
- 用途:
- 创建子 shell在圆括号中的命令序列将在一个子 shell 中执行,子 shell 是一个独立的进程,它会继承父 shell 的环境变量和文件描述符,但是变量的修改在子 shell 中不会影响到父 shell。
- 数组赋值:在圆括号中可以定义数组,并将值赋给数组。
- 示例:
```bash
(command1; command2; command3)
```
- 注意事项:
- 在圆括号中的命令序列与外部环境是隔离的,所以在子 shell 中定义的变量对于父 shell 是不可见的。
2. 花括号 `{}`
- 用途:
- 命令扩展和分组:花括号可以用于扩展和分组命令,可以将多个命令组合在一起,作为一个整体进行处理。
- 文件名扩展:花括号可以用于生成文件名的列表,例如使用通配符进行文件名扩展。
- 示例:
```bash
{ command1; command2; }
```
- 注意事项:
- 花括号中的命令序列会在当前 shell 中执行,不会创建子 shell。
- 花括号中的命令序列可以使用分号 `;` 或换行符分隔多个命令。
总结:
- 圆括号 `()` 用于创建子 shell并在子 shell 中执行命令序列。
- 花括号 `{}` 用于命令扩展和分组,将多个命令组合在一起进行处理。
#### 判断文件
test -e "$1" # 与下面等价
[ -e "$1" ] # 与上面等价
更多判断
-d 是目录
-f 是文件
-e 是存在
-r 是可读
-w 是可写
-x 是可执行
-s 是非空
-h 是软链接
-L 是软链接
-p 是管道
-S 是 socket
-b 是块设备
-c 是字符设备
-t 是终端
-g 是设置了组 ID
-u 是设置了用户 ID
-k 是设置了粘滞位

23
day1/d1.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
mkdir /home/flykhan/qfedu-linux-advanced-level/day1/cmd_test
echo "1-----mkdir-----end"
cd /home/flykhan/qfedu-linux-advanced-level/day1/cmd_test
echo "2-----cd-----end"
cp /lib/*.so* ./
echo "3-----cp-----end"
tar jcvf so.tar.bz2 *.so*
echo "4-----tar jcvf-----end"
tar zcvf so.tar.gz *.so*
echo "5-----tar zcvf-----end"
mkdir c_test
echo "6-----mkdir c_test-----end"
tar zxvf so.tar.gz -C ./c_test
echo "7-----tar zxvf-----end"
rm so.tar.gz
echo "8-----rm-----end"
chmod 700 so.tar.bz2
echo "9-----chmod 700-----end"
ls /dev/ > dev.txt
echo "10-----ls /dev-----end"
grep console dev.txt -n
echo "11-----grep-----end"

5
day1/d10.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
echo "your name is $USER"
echo "your home directory is $HOME"
echo "your shells path is $ShellsPath"

22
day1/d11.sh Normal file
View File

@ -0,0 +1,22 @@
#!/bin/bash
# $# 用于获取参数的个数
echo "$#"
# $* 用于获取所有参数
echo "$*"
# $1 $2 $3 用于获取第 1 2 3 个参数
echo "$1,$2,$3"
# $? 用于获取上一条命令的返回值0 为正确,非 0 为错误
echo $?
rm a.txt
echo $?
# $$ 用于获取当前脚本的进程号
echo $$
# $0 用于获取当前脚本的名称
echo $0
# 测试使用 ./d11.sh 1 2 3

7
day1/d12.sh Normal file
View File

@ -0,0 +1,7 @@
#!/bin/bash
# `` 使用示例
echo "current datetime is `date +"%y年-%m月-%d日 %H:%M:%S"`"
# 转义空格
echo "current datetime is `date +%y年-%m月-%d日\ \ %H:%M:%S`"

45
day1/d13.sh Normal file
View File

@ -0,0 +1,45 @@
#!/bin/bash
name=flykhan
echo "0 $name"
echo "main $$"
# 使用圆括号创建子shell
# () 不影响
(name=Lucy; echo "1 $name"; echo "() $$")
echo "0 $name"
# 使用花括号进行命令扩展和分组,记得语句后的 ';'
{ name=Jack; echo "2 $name"; echo "{} $$"; }
echo "0 $name"
# 在 Bash 脚本中,圆括号 `()` 和花括号 `{}` 有不同的用途和行为。
# 1. 圆括号 `()`
# - 用途:
# - 创建子shell在圆括号中的命令序列将在一个子shell 中执行子shell 是一个独立的进程它会继承父shell 的环境变量和文件描述符但是变量的修改在子shell 中不会影响到父shell。
# - 数组赋值:在圆括号中可以定义数组,并将值赋给数组。
# - 示例:
# ```bash
# (command1; command2; command3)
# ```
# - 注意事项:
# - 在圆括号中的命令序列与外部环境是隔离的所以在子shell 中定义的变量对于父shell 是不可见的。
# 2. 花括号 `{}`
# - 用途:
# - 命令扩展和分组:花括号可以用于扩展和分组命令,可以将多个命令组合在一起,作为一个整体进行处理。
# - 文件名扩展:花括号可以用于生成文件名的列表,例如使用通配符进行文件名扩展。
# - 示例:
# ```bash
# { command1; command2; }
# ```
# - 注意事项:
# - 花括号中的命令序列会在当前shell 中执行不会创建子shell。
# - 花括号中的命令序列可以使用分号 `;` 或换行符分隔多个命令。
# 总结:
# - 圆括号 `()` 用于创建子shell并在子shell 中执行命令序列。
# - 花括号 `{}` 用于命令扩展和分组,将多个命令组合在一起进行处理。

36
day1/d14.sh Normal file
View File

@ -0,0 +1,36 @@
#!/bin/bash
echo "Using test -e:"
test -e "$1"
echo $?
echo "Using [ -d ]:"
[ -d "$1" ]
echo $?
echo "Using [ -x ]:"
[ -x "$1" ]
echo $?
# 判断文件是否存在
# test -e "$1" # 与下面等价
# [ -e "$1" ] # 与上面等价
# 更多判断
# -d 是目录
# -f 是文件
# -e 是存在
# -r 是可读
# -w 是可写
# -x 是可执行
# -s 是非空
# -h 是软链接
# -L 是软链接
# -p 是管道
# -S 是socket
# -b 是块设备
# -c 是字符设备
# -t 是终端
# -g 是设置了组ID
# -u 是设置了用户ID
# -k 是设置了粘滞位

17
day1/d15.sh Normal file
View File

@ -0,0 +1,17 @@
#!/bin/bash
# -r 防止特殊字符被转义,例如 \n
read -r pwd1
read -r pwd2
echo "$pwd1 is zero string?"
[ -z "$pwd1" ]
echo $?
[ "$pwd1" = "$pwd2" ]
if [ $? -eq 0 ]
then
echo "pwd1 is equal to pwd2"
else
echo "pwd1 is not equal to pwd2"
fi

55
day1/d16.sh Normal file
View File

@ -0,0 +1,55 @@
#!/bin/bash
# -eq 是等于
test "$1" -eq "$2"
if [ $? -eq 0 ]
then
echo "$1 == $2"
else
echo "$1 != $2"
fi
# -gt 是大于
test "$1" -gt "$2"
if [ $? -eq 0 ]
then
echo "$1 > $2"
else
echo "$1 !> $2"
fi
# -lt 是小于
test "$1" -lt "$2"
if [ $? -eq 0 ]
then
echo "$1 < $2"
else
echo "$1 !< $2"
fi
# -ge 是大于等于
test "$1" -ge "$2"
if [ $? -eq 0 ]
then
echo "$1 >= $2"
else
echo "$1 !>= $2"
fi
# -le 是小于等于
test "$1" -le "$2"
if [ $? -eq 0 ]
then
echo "$1 <= $2"
else
echo "$1 !<= $2"
fi
# -ne 是不等于
test "$1" -ne "$2"
if [ $? -eq 0 ]
then
echo "$1 != $2"
else
echo "$1 == $2"
fi

4
day1/d17.sh Normal file
View File

@ -0,0 +1,4 @@
#!/bin/bash
# 当 a.txt 存在时,执行 echo "good" >> a.txt否则执行 echo "bad" >> a.txt
test -e a.txt && echo "good" >> a.txt || echo "bad" >> a.txt

3
day1/d18.sh Normal file
View File

@ -0,0 +1,3 @@
#!/bin/bash
test -e $1 && test -f $1 && grep flykhan $1 -n || echo "file not exist or not a file"

3
day1/d19.sh Normal file
View File

@ -0,0 +1,3 @@
#!/bin/bash
[ -e $1 ] && ls -l $1 || echo "file not exist"

60
day1/d2.sh Normal file
View File

@ -0,0 +1,60 @@
#!/bin/bash
flag=1
# -e 检测存在性
if [ -e ~/qfedu-linux-advanced-level/day1/test2 ]; then
echo "the test dir is exist"
else
echo "the test dir is not exist"
# 等同于 while[ $flag ]
# do 用于开始 while 循环
while [ $flag -eq 1 ]
do
echo "press y to create the dir,press n to exit"
read yn
case $yn in
y)
echo "mkdir ~/qfedu-linux-advanced-level/day1/test2"
mkdir ~/qfedu-linux-advanced-level/day1/test2
# flag = 0 用于结束 while 循环
flag = 0
# ;; 用于结束 case 语句,相当于 break
;;
n)
echo "end operation"
# exit -1 用于退出脚本,-1 为错误码
exit -1
;;
*)
echo "your input is error exit"
echo "please input again"
flag=1
;;
# esac 用于结束 case 语句
esac
# done 用于结束 while 循环
done
# fi 用于结束 if 语句
fi
cd ~/qfedu-linux-advanced-level/day1/test2
for((i=1 ; i<4 ; i++))
do
echo "please input a string, we will create it as a dir"
read dir_name
if [ -e $dir_name ]; then
echo "$i please input other name"
else
echo "the $dir_name is created"
mkdir $dir_name
break
fi
done
echo "your times is over"
if [ $i -eq 3 ]; then
echo "your times is over"
exit 0
fi

15
day1/d20.sh Normal file
View File

@ -0,0 +1,15 @@
#!/bin/bash
# 多重条件判定:
# 1. -a 是与
# 2. -o 是或
# 3. ! 是非
#!/bin/bash
# 检查文件是否存在并且可读可写可执行
if [ -e "$1" ] && [ -r "$1" -a -w "$1" -a -x "$1" ]; then
echo "file $1 exists and is readable, writable, and executable"
else
echo "file $1 does not exist or is not readable, writable, or executable"
fi

5
day1/d3.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
# 注释的部分
echo "--t1.sh--"
ls ~/qfedu-linux-advanced-level/day1/cmd_test -l

5
day1/d4.sh Normal file
View File

@ -0,0 +1,5 @@
# no bash interpreter
echo "--mkdir abc--"
mkdir abc
echo "--ok--"

5
day1/d5.sh Normal file
View File

@ -0,0 +1,5 @@
#!/bin/bash
age=20
name=flykhan
echo "my name is $name, and my age is $age"

6
day1/d6.sh Normal file
View File

@ -0,0 +1,6 @@
#!/bin/bash
# read 是读取, -p 是打印
read -p "please input your name: " name
read -p "please input your age: " age
echo "my name is $name, and my age is $age"

17
day1/d7.sh Normal file
View File

@ -0,0 +1,17 @@
#!/bin/bash
readonly PI=3.1415926
echo PI=$PI
x=1
x=2
echo $x
# 清除 x 变量之后,变量还可以再次读取,但是变量的内容为空
unset x
echo $x
r=2
# 进行算术运算时,变量前面不需要加 $ 符号,且不支持浮点数运算
# S=$((PI*r))
S=$(echo "$PI * $r" | bc -l)
echo S=$S

8
day1/d8.sh Normal file
View File

@ -0,0 +1,8 @@
#!/bin/bash
msg="hi flykhan"
echo $msg
echo "$msg very good"
echo '$msg very good'
bye='bye bye'
echo $bye

4
day1/d9.sh Normal file
View File

@ -0,0 +1,4 @@
#!/bin/bash
echo "your name is $USER"
echo "your home directory is $HOME"

23
day1/svim.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
# 设计 svim 编辑器的脚本,自动添加 shell 脚本的头部信息和文件权限,
# 并创建 /usr/bin/svim 的软链接
# 验证是否提供了文件路径 (文件名)
# 验证参数个数是否等于 1
if [ $# -eq 1 ]
then
if [ ! -e $1 ]; then
echo "#!/bin/bash">$1
echo "" >> $1
chmod +x $1
fi
vi +'set nu' +'set fileencoding=utf-8' +2 $1
else
echo "Usage: svim filename"
fi
# 使用 Vim 编辑器打开该文件,并进行以下设置:
# +'set nu':设置显示行号。
# +'set fileencoding=utf-8':设置文件编码为 UTF-8。
# +2将光标定位到文件的第二行在这里$1 是传递的文件名参数)。