title: linux-shell
date: 2021-05-28 17:22:25
tags: [ubuntu, linux, shell, directory]

categories: [Linux]

shell编程

获取用户输入内容,并进行判断

read -p “please input(Y/N):” yn

数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1.定义数组
$ a=(1 2 3 4 5)

2.数组长度
$ echo ${#a[@]}
用${#数组名[@或*]} 可以得到数组长度

3.读取数组
$ echo ${a[2]}
$ echo ${a[*]}
用${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容

4.赋值
$ a[1]=100
直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素

5.删除
$ unset a
$ unset a[1]
直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。

6.循环数组

1
2
3
4
5
6
7
8
for value in ${a[@]}
do
echo $value
done
for ((i=0;i<${#a[@]};i++)) #不加双括号会报错
do
echo ${a[$i]}
done

7.特殊使用

1
2
3
4
5
6
7
8
9
10
11
1)分片:
# a=(1 2 3 4 5 6)
# echo ${a[@]:0:3}
1 2 3
# echo ${a[@]:1:4}
2 3 4 5
# c=(${a[@]:1:4})
# echo ${#c[@]}
4
# echo ${c[*]}
2 3 4 5

直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。

2)替换:

1
2
3
4
5
# a=(1 2 3 4 5 3)
# echo ${a[@]/3/8}
1 2 8 4 5 8
# echo ${a[@]}
1 2 3 4 5 3

调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容。

读取目录

获取某目录下全部子目录

ls -F | grep ‘/$’
注:ls -F 显示的目录以/结尾,再用grep筛选出来,-F参数使得ls命令可以在显示子目录的时候在它的文件名之后加上一个斜线(“/”)字符。而文件后面的星号(“*”)字符表示这是一个可执行程序

ls -l | grep ‘^d’
注:ls -l 显示的目录以d开头

ls -ld */

ls -ap | grep ‘/‘
注:ls -p可以给目录加上一个’/’,过滤一下就能只显示目录了,-a显示隐藏文件。

获取某目录下全部文件

ls -F | grep -v ‘/$’
注:grep -v 找相反的,也就是不以/结尾的文件

ls -F | grep -v ‘/$’ | grep ‘.py$’
注:找出文件,且以.py结尾的。

脚本批量压缩

1.将当前目录下的所有文件夹压缩

找到所有的文件夹进行压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

dirnames=$(ls -d */)
for dir in $dirnames
do
temp=${dir%/}
echo $temp
echo $(tar -cvf $temp".tar.gz" $temp)
testing=$(test -e $temp".tar.gz" && echo yes)
if [ "$testing"=="yes" ]; then
echo $(scp $temp".tar.gz" user@IP:/home/user )
fi
done

找到当前目录下所有的文件和文件夹,选出文件夹进行压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

for dir in $(ls)
do
if [ -d $dir ]; then
echo $dir
echo $(tar -cvf $dir".tar.gz" $dir)
testing=$(test -e $dir".tar.gz" && echo yes)
if [ "$testing"=="yes" ]; then
echo $(scp $dir".tar.gz" user@IP:/home/user )
fi
fi
done

Problems

ubuntu文件夹打不开,点击文件夹没反应

直接在命令行输入:
killall nautilus

Contents
  1. 1. categories: [Linux]
  2. 2. 获取用户输入内容,并进行判断
  3. 3. 数组
  4. 4. 读取目录
    1. 4.1. 获取某目录下全部子目录
    2. 4.2. 获取某目录下全部文件
  5. 5. 脚本批量压缩
    1. 5.1. 1.将当前目录下的所有文件夹压缩
  • Problems
    1. 1. ubuntu文件夹打不开,点击文件夹没反应
  • |