shell編程100例—學習

持續更新中,今年要好好學習shell呀。
原文章連接:shell編程100例

1、編寫hello world腳本
[root@bigdata04 study_shell_100]# cat file1.sh 
#!/bin/env bash
#編寫hello world腳本

echo "hello world"
[root@bigdata04 study_shell_100]# file1.sh 
hello world
2、通過位置變量創建 Linux 系統賬戶及密碼
[root@bigdata04 study_shell_100]# cat file2.sh 
#!/bin/env bash
#通過位置變量創建linux系統賬戶及密碼

#$1是執行腳本的第一個參數,$2是執行腳本的第二個參數

useradd "$1"
echo "$2" | passwd --stdin "$1"

知識點:
1)建立用戶帳號:useradd 用戶名

[root@bigdata04 study_shell_100]# useradd big

帳號建好之後,再用 passwd 設定帳號的密碼

2)更改用戶名密碼:passwd 用戶名

[root@bigdata04 study_shell_100]# passwd big
Changing password for user big.
New password: 
BAD PASSWORD: The password is shorter than 7 characters
Retype new password:
passwd: all authentication tokens updated successfully.

3)位置變量
參考文章:shell中$*,$@,$#的區別
參考文章:linux shell 中的位置變量

$@$*只在被雙引號包起來的時候纔會有差異
01)雙引號括起來的情況:
$*將所有的參數認爲是一個字段
$@以 默認爲空格 來劃分字段,如果空格在“”裏面,不劃分。

02)沒有括起來的情況是$@$*一樣的,見到空格就劃分字段。
$#是 程序的 參數個數(不包括$0
$? 獲取上一次命令執行的返回值,一般 執行 成功 返回0。
$0 $1 $2以此類推,取命令行參數,如 test.sh a b c ,則 $0是 test,$1是 a, $2是b,$3是c。

案例:

for name in xp wrg lct
do
useradd $name
echo red | passwd --stdin $name
done

解釋:passwd --stdin $name是更改$name變量的密碼,$name變量指代上面for循環的三個用戶xp ,wrg, lct
加上--stdin是接受echo後面的字符串(red)做爲密碼,密碼是red

意思就是,創建三個用戶:xp ,wrg, lct
密碼都是:red

3、備份日誌,每週 5 使用 tar 命令備份/var/log 下的所有日誌文件

解題思路:第一步編寫日誌備份腳本,第二步編寫定時任務、執行日誌備份的腳本
第一步編寫日誌備份腳本

[root@bigdata04 study_shell_100]# cat file3.sh 
#!/bin/env bash
#需求:每週 5 使用 tar 命令備份/home/study/shell_study/study_shell_100 下的所有文件
#腳本路徑:/home/study

tar czf log-`date +%Y%m%d`.tar.gz ./study_shell_100

第二步編寫定時任務

# crontab ‐e    #編寫計劃任務,執行備份腳本
#每週五的3 : 00執行腳本file3.sh

00 03 * * 5 /home/study/file3.sh

知識點:
1)壓縮文件
tar命令可以用來壓縮打包單文件、多個文件、單個目錄、多個目錄。
常用格式:
單個文件壓縮打包 tar czvf my.tar file1
多個文件壓縮打包 tar czvf my.tar file1 file2,...
單個目錄壓縮打包 tar czvf my.tar dir1
多個目錄壓縮打包 tar czvf my.tar dir1 dir2

2)定時任務
Linux下創建定時執行任務可使用crontab,系統默認自帶crontab。
參考文章:設置定時執行任務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章