プログラマー以外の人のためのBashスクリプトの基本。パート3

、物品の第二部、我々は、スクリプトファイル、それらのパラメータとアクセス権を議論しました。また、条件付き実行、選択、およびループについても説明しました。この最後の部分では、cronの関数とスケジューラーを見ていきます。また、さまざまな便利なコマンドとリンクを提供します。





機能

頻繁に使用される繰り返しブロックを別々の関数に分割して、必要に応じてパラメーターを渡して実行することは理にかなっています。





関数の定義は次のようになります。





<_>() {
  <>
  return <>
}

function <_>() {
  <>
  return <>
}
      
      



最初のオプションはC言語の構文に近く、移植性が高いと見なされます。2番目のオプションでは、括弧を省略できます。関数が値を返さない場合も、returnステートメントが欠落している可能性があります。





宣言と関数呼び出しを含むスクリプトの最も単純な例は、次のようになります。





#!/bin/bash

f() {
  echo Test
}

f
      
      



f



Testという単語を出力する関数を宣言し、それを呼び出しました。





test@osboxes:~$ ./script6.sh
Test
      
      



スクリプトと同じように、関数はパラメーターを受け入れて、数値($ 1、$ 2、…、$ N)を参照してそれらを使用できます。スクリプト内のパラメーターを使用した関数呼び出しは、次のように実行されます。





< > <1> <2><N>
      
      



( ) 0 255. , 0, , . , $?



. , :





#!/bin/bash

summ() {
  re='^[0-9]+$'
  if ! [[ $1 =~ $re ]] ; then
    return 1
  elif ! [[ $2 =~ $re ]] ; then
    return 2
  else
    s=$(($1 + $2))
    return 0
  fi
}

summ $1 $2

case $? in
 0) echo "The sum is: $s" ;;
 1) echo "var1 is not a nubmer" ;;
 2) echo "var2 is not a nubmer" ;;
 *) echo "Unknown error" ;;
esac
      
      



summ, 2 ^[0-9]+$



, . , , 1, , 2. , s.





, , . , 0, , s



. :





test@osboxes.org:~$ ./script7.sh abc 123
var1 is not a nubmer
test@osboxes.org:~$ ./script7.sh 234 def
var2 is not a nubmer
test@osboxes.org:~$ ./script7.sh 10 15
The sum is: 25
      
      



, .. . , , , , . , "" , .





, , local, local loc_var=123



. , , , , .





, :





#!/bin/bash

clearFiles() {
  rm *.dat
  if [ $? -eq 0 ]
  then
    echo Files deleted
  fi
}

genFiles() {
  for (( i=1; i<=$1; i++ ))
  do
    head -c ${i}M </dev/urandom >myfile${i}mb.dat
  done
  ls -l *.dat
}

delFiles() {
for f in *.dat
  do
    size=$(( $(stat -c %s $f) /1024/1024 ))
    if [ $size -gt $1 ]
    then
      rm $f
      echo Deleted file $f
    fi
  done
  ls -l *.dat
}

showWeather() {
  curl -s "https://weather-broker-cdn.api.bbci.co.uk/en/observation/rss/$1" | grep "<desc" | sed -r 's/<description>//g; s/<\/description>//g'
}

menu() {
  clear
  echo 1 - Delete all .dat files
  echo 2 - Generate .dat files
  echo 3 - Delete big .dat files
  echo 4 - List all files
  echo 5 - Planet info
  echo 6 - Show weather
  echo "x/q - Exit"
  echo -n "Choose action: "
  read -n 1 key
  echo
}

while true
do
  case "$key" in
    "x" | "q" | "X" | "Q") break ;;
    "1")
      clearFiles
      read -n 1
    ;;
    "2")
      echo -n "File count: "
      read count
      genFiles $count
      read -n 1
    ;;
    "3")
      echo -n "Delete file greater than (mb): "
      read maxsize
      delFiles $maxsize
      read -n 1
    ;;
    "4")
      ls -la
      read -n 1
    ;;
    "5")
      ./script4.sh
      read -n 1
    ;;
    "6")
      echo -n "Enter city code: " # 524901 498817 5391959
      read citycode
      showWeather $citycode
      read -n 1
    ;;
  esac
  menu
done
      
      



5 :





  • clearFiles





  • genFiles





  • delFiles





  • showWeather





  • menu





while true, , menu . :





  • .dat

















  • ,









, , , , ( ), break . , , , , . :





test@osboxes.org:~$ ./script8.sh
1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 4
total 40
drwxr-xr-x 2 test test 4096 Feb 16 15:56 .
drwxr-xr-x 6 root root 4096 Feb 16 15:54 ..
-rw------- 1 test test   42 Feb 16 15:55 .bash_history
-rw-r--r-- 1 test test  220 Feb 16 15:54 .bash_logout
-rw-r--r-- 1 test test 3771 Feb 16 15:54 .bashrc
-rw-r--r-- 1 test test  807 Feb 16 15:54 .profile
-rw-r--r-- 1 test test 1654 Feb 16 12:40 input.xml
-rwxr-xr-x 1 test test  281 Feb 16 14:02 script4.sh
-rwxr-xr-x 1 test test  328 Feb 16 13:40 script7.sh
-rwxr-xr-x 1 test test 1410 Feb 16 15:24 script8.sh
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 2
File count: 8
-rw-rw-r-- 1 test test 1048576 Feb 16 16:00 myfile1mb.dat
-rw-rw-r-- 1 test test 2097152 Feb 16 16:00 myfile2mb.dat
-rw-rw-r-- 1 test test 3145728 Feb 16 16:00 myfile3mb.dat
-rw-rw-r-- 1 test test 4194304 Feb 16 16:00 myfile4mb.dat
-rw-rw-r-- 1 test test 5242880 Feb 16 16:00 myfile5mb.dat
-rw-rw-r-- 1 test test 6291456 Feb 16 16:00 myfile6mb.dat
-rw-rw-r-- 1 test test 7340032 Feb 16 16:00 myfile7mb.dat
-rw-rw-r-- 1 test test 8388608 Feb 16 16:00 myfile8mb.dat
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 3
Delete file greater than (mb): 5
Deleted file myfile6mb.dat
Deleted file myfile7mb.dat
Deleted file myfile8mb.dat
-rw-rw-r-- 1 test test 1048576 Feb 16 16:00 myfile1mb.dat
-rw-rw-r-- 1 test test 2097152 Feb 16 16:00 myfile2mb.dat
-rw-rw-r-- 1 test test 3145728 Feb 16 16:00 myfile3mb.dat
-rw-rw-r-- 1 test test 4194304 Feb 16 16:00 myfile4mb.dat
-rw-rw-r-- 1 test test 5242880 Feb 16 16:00 myfile5mb.dat
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 1
Files deleted
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 5
Enter the name of planet: Mars
The Mars has two satellite(s).
      
      



1 - Delete all .dat files
2 - Generate .dat files
3 - Delete big .dat files
4 - List all files
5 - Planet info
6 - Show weather
x/q - Exit
Choose action: 6
Enter city code: 524901
    Latest observations for Moscow from BBC Weather, including weather, temperature and wind information
      Temperature: -11°C (11°F), Wind Direction: Northerly, Wind Speed: 0mph, Humidity: 84%, Pressure: 1018mb, , Visibility: Moderate
      
      



: ( 6 ) curl, sudo apt install curl



.





cron

, , cron, .





crontab –l



. crontab –e



. cron :





m h dom mon dow command parameters
      
      



m – , h – , dom – , mon – , dow – , command – , parameters – . :





, , 10 30 , :





10,30 * * * 1-5 command parameter1 parameter2
      
      



, 15 :





*/15 * * * * command
      
      



, :





#!/bin/bash
USER=`whoami`
BACKUP_DIR=/tmp/backup_${USER}
BACKUP_FILE=${USER}_$(date +%Y%m%d%M%H%S).tgz

mkdir -p $BACKUP_DIR
cd /
tar -zcf $BACKUP_DIR/$BACKUP_FILE home/$USER
      
      



22:00, crontab -e



:





00 22 * * * ./backup_home.sh
      
      



, , crontab -l



:





test@osboxes.org:~$ crontab -l
00 22 * * * ./backup_home.sh
      
      



22:00 ( ):





test@osboxes.org:~$ cd /tmp/backup_test/
test@osboxes:/tmp/backup_test$ ll
total 80
drwxrwxr-x  2 test test 4096 Feb 16 16:38 ./
drwxrwxrwt 17 root root 4096 Feb 16 16:30 ../
-rw-rw-r--  1 test test 4431 Feb 16 16:30 test_20210216301601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:31 test_20210216311601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:32 test_20210216321601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:33 test_20210216331601.tgz
-rw-rw-r--  1 test test 4431 Feb 16 16:34 test_20210216341601.tgz
test@osboxes:/tmp/backup_test$
      
      



, /tmp , .. , . .





: help

: <> --help

: man <>

: <> --version

: cat /etc/shells

: cat /etc/passwd

: pwd

: ls -la

: id

: set

: cat /etc/os-release

: uname -a

: sudo su -

Debian: apt install mc

(): top

: df -h

: du -ks /var/log

: ifconfig -a

: free -m

(): lsblk

: cat /proc/cpuinfo

: apt list --installed

: service --status-all

: service apache2 restart

: wget https://www.gnu.org/graphics/gplv3-with-text-136x68.png

- URL: curl https://www.google.com

: crontab -l

: crontab -e

: tail -f /var/log/syslog

: <> | wc -l

( ): chmod a+x <>

: ps -ef

, : ps -ef | grep <>

: cd -

( kill): kill -9

: rm < >

: rm -rf < >

: nano <_>

10 : ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -nr | head





bash: GNU Bash manual

Bash: Advanced Bash-Scripting Guide

: Bash

bash: SS64

Debian GNU/Linux: Debian FAQ





bash, , , . Bash , . .





今のところこれですべてです。面白かったと思います。

他にどのような便利なコマンドを知っていて、仕事で使用していますか?

どのような興味深いデザインを使用する必要がありましたか?

どのようなタスクを解決しましたか?

皆さんのスクリプトを作成してください。コメントで意見を共有してください。








All Articles