获取文件名,不带拓展名
使用%操作符
[root@wenzi ~]#vim example.sh
#!/bin/bash
file_name="abc.txt"
name=${file_name%.*}
echo $name
[root@wenzi ~]#./example.sh
abc
说明:
${变量%关键词}:若变量从尾开始的数据符合关键词,则将符合的最短数据删除。
file_name是abc.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"
执行远程主机的脚本
#主机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
持续更新