持續更新中,今年要好好學習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。
參考文章:設置定時執行任務