Skrypt:
- pozwala na wybór zewnętrznych napisów,
- przeszukuje plik video czy zawiera wbudowane napisy, jeżli tak wyświetli okno wyboru,
- gdy proporcje obrazu na to pozwalają napisy będą wyświetlane na czarnym pasku pod filmem,
- pozwala na wybór scieżek dźwiękowych
#!/usr/bin/perl

use strict;

my($VO) = 'xv';
my($AO) = 'alsa';
my($SUB_CP) = 'cp1250';

my($video)="@ARGV";
#my($video) = `zenity --title="Select video." --file-selection`;
chomp($video);

my($subtitles) = `zenity --title="Select subtitles." --file-selection`;
chomp($subtitles);

my($x) = 0.0;
my($y) = 0.0;
my($y_expand) = 0.0;
my($expand) = 0.0;
my($video_format) = "NIEZNANY";
my($i);
my(@audio_table) = ();
my($audio_table_elements);
my($audios);
my($audio_id);
my(@sub_table) = ();
my($sub_table_elements);
my($subs);
my($sub_id);

my(@video_info) = `mplayer -ao null -vo null -frames 5 -identify \"$video\" 2>/dev/null`;

foreach $i (@video_info)
{
  if( $i =~ /^ID_VIDEO_WIDTH/)
  {
  	$x = substr($i, 15, -1);
  }
  if($i =~ /^ID_VIDEO_HEIGHT/)
  {
  	$y = substr($i, 16, -1);
  }
  if($i =~ /^ID_VIDEO_FORMAT/)
  {
  	$video_format = substr($i, 16, -1);
  }
  if($i =~ /^ID_AUDIO_ID/)
  {
  	$audio_table_elements = substr($i, 12, -1);
  	push(@audio_table, $audio_table_elements);
  }
  if($i =~ /^ID_SUBTITLE_ID/)
  {
  	$sub_table_elements = substr($i, 15, -1);
  push(@sub_table, $sub_table_elements);
  }
}
if($video_format =~ "NIEZNANY")
{
  exec("zenity --error");
  exit(1);
}

$y_expand = $x * 0.75;
if($y_expand > $y)
{
  $expand = $y_expand - $y;
  $expand = int($expand + 0.5);
}
else
{
  $expand = 0;
}

if($#audio_table > 0)
{
  $audios = join(" FALSE ", @audio_table);
  $audios = "FALSE " . $audios;
  $audio_id = `zenity  --list --radiolist  --column " " --column "AUDIO__ID" $audios`;
  $audio_id = int($audio_id);
}
else
{	
  $audio_id = $audio_table[0];
}

if(length($subtitles) > 0)
{
  exec("mplayer -vo $VO -ao $AO -aid $audio_id -vf expand=0:-$expand -sub \"$subtitles\" \"$video\"");
  exit(0);		
}
else
{
  if($#sub_table == -1)
  {
  	exec("mplayer -vo $VO -ao $AO -subcp $SUB_CP -aid $audio_id -vf expand=0:-$expand \"$video\"");
  	exit(0);
  }
  else
  {
  	if($#sub_table > 0)
  	{
  	  $subs = join(" FALSE ", @sub_table);
  	  $subs = "FALSE " . $subs;
  	  $sub_id = `zenity  --list --radiolist  --column " " --column "SUBTITLE__ID" $subs`;
  	  $sub_id = int($sub_id);
  	}
  	else
  	{
  	  $sub_id = 0;
  	}
  }
  exec("mplayer -vo $VO -ao $AO -subcp $SUB_CP -aid $audio_id -sid $sub_id -vf expand=0:-$expand \"$video\"");
  exit(0);
}


Napisz w języku powłoki funkcję, która sprawdzi czy pierwszy parametr wywołania jest poprawną liczbą w zapisie szestnastkowym. Funkcja pod swoją nazwą ma zwracać: wartość dziesiętną liczby gdy jest poprawna, -1 w przeciwnym wypadku.
© GMB
#! /bin/bash
function hex2dec
{
count=${#1}
tablica=$1
c=$count
d=1
dec=0
while [ $c -gt 0 ];
do
test=${tablica:$((count-$d)):1}
#przekształcanie liter
touch tmp
echo $test > tmp
test2=`grep -cv '[0-9,a-f]' tmp`
if [ $test2 -gt 0 ] ;
then echo zle; exit -1
fi
#obliczanie
case $test in
      "a") test=10;;
      "b") test=11;;
      "c") test=12;;
      "d") test=13;;
      "e") test=14;;
      "f") test=15;;
esac
wynik=$((wynik+$((test*$((16**$((d-1))))))))
d=$[d+1]
c=$[c-1]
done
echo $wynik
}
hex2dec $1