Shell脚本练习——文件相关

获取文件名,不带拓展名

使用%操作符

[root@wenzi ~]#vim example.sh
#!/bin/bash
file_name="abc.txt"
name=${file_name%.*}
echo $name
[root@wenzi ~]#./example.sh 
abc

说明:

${变量%关键词}:若变量从尾开始的数据符合关键词,则将符合的最短数据删除。

file_nameabc.txt*是通配符,匹配0个或无穷个任意字符,所以.*匹配的是.txt,因此从abc.txt中删除匹配结果,得到abc

获取文件拓展名

使用#操作符

[root@wenzi ~]#vim example.sh
#!/bin/bash
file_name="abc.txt"
extension=${file_name#*.}
echo $extension
[root@wenzi ~]#bash example.sh 
txt

说明:

${变量#关键词}:若变量从头开始的数据符合关键词,则将符合的最短数据删除

*是通配符,匹配0个或无穷个任意字符,所以*.匹配的是abc.,因此从abc.txt中删除匹配结果,得到txt

备份文件

[root@wenzi data]#vim backup.sh 
#!/bin/bash
echo -e "\033[1;32mStarting backup...\033[0m"
sleep 2
cp -av /etc/ /data/etc_`date +%F`/
echo -e "\033[1;32mBackup is finished\033[0m"

Shell脚本练习——文件相关_第1张图片

执行远程主机的脚本

#主机192.168.29.142
[root@wenzi ~]#yum -y install httpd
[root@wenzi ~]#vim /var/www/html/hello.sh
#!/bin/bash
echo "hello world"
[root@wenzi ~]#systemctl start httpd

#主机192.168.29.141
[root@wenzi data]#curl http://192.168.29.142/hello.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    31  100    31    0     0  31000      0 --:--:-- --:--:-- --:--:-- 31000
hello world
[root@wenzi data]#curl -s http://192.168.29.142/hello.sh | bash
hello world

rm命令的安全实现

[root@wenzi data]#vim rm.sh 
#!/bin/bash
warning_color="echo -e \E[1;31m"
end="\E[0m"
dir=/tmp/`date +%F%T`
mkdir $dir
mv $* $dir
${warning_color}Move $* to $dir $end
[root@wenzi data]#chmod 777 /data/rm.sh 
[root@wenzi data]#alias rm='/data/rm.sh'
[root@wenzi data]#touch {1..3}.txt
[root@wenzi data]#ll
total 4
-rw-r--r-- 1 root root   0 Jul 22 10:43 1.txt
-rw-r--r-- 1 root root   0 Jul 22 10:43 2.txt
-rw-r--r-- 1 root root   0 Jul 22 10:43 3.txt
-rw-r--r-- 1 root root 138 Jul 22 10:42 rm.sh
[root@wenzi data]#rm *.txt
Move 1.txt 2.txt 3.txt to /tmp/2023-07-2210:45:20 

说明:

$*:位置变量,代表除了$0(脚本本身名字)以外,所有的参数,如上即 “opt1 opt2 opt3 opt4“,每个变量之间用空格分割,共用一个双引号

批量创建用户并设置随机密码

[root@wenzi data]#cat batchCreateUser.sh 
#!/bin/bash
userNum=$1

for ((i=1;i<=${userNum};i+=1))
do
	useradd wenzi$i
	pwd=`cat /dev/urandom | tr -d -c '[:alnum:]' | head -c 12`
	echo $pwd | passwd --stdin wenzi$i &> /dev/null
	echo wenzi$i:$pwd >> /data/user.log
	echo "wenzi$i is created"
done
[root@wenzi data]#bash batchCreateUser.sh 5
wenzi1 is created
wenzi2 is created
wenzi3 is created
wenzi4 is created
wenzi5 is created
[root@wenzi data]#cat /data/user.log 
wenzi1:aBfx6xKXXWXd
wenzi2:zeiXcSdeECga
wenzi3:XXWhxovUy9o1
wenzi4:mk6wF4gqQxbP
wenzi5:YvcHWo6UYQcP

#删除生成的用户
[root@wenzi data]#for i in {1..5};do userdel -r wenzi$i;done

说明:

/dev/urandom是随机数生成器

[:alnum:] 代表英文大小写字符及数字,即 0-9,A-Z,a-z

tr的-d选项:删除信息中指定内容;-c选项:使用指定字符串的补集替换该字符串;所以tr删除的是非'[:alnum:]'的内容

将指定目录下所有文件的后缀名改为bak

持续更新

你可能感兴趣的:(#,Shell脚本,Linux基础,linux,运维)